题意
求一棵树每个结点的父节点,根节点为-1.
题解
就是一个无向图,dfs一下。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 10;
int p[maxn];
vector<int> g[maxn];
int n, s, t;
/*这里的p数组存储结点的父节点,可以用来作为结点是否访问的标记*/
void dfs(int s, int pre)
{
if(p[s]) return;
p[s] = pre;
for(int i = 0; i < (int)g[s].size(); ++i)
{
int v = g[s][i];
dfs(v, s);
}
}
void dfs(int s)
{
for(int i = 0; i < (int)g[s].size(); ++i)
{
int v = g[s][i];
if(p[v]) continue;
p[v] = s;
dfs(v);
}
}
int main()
{
for(cin >> t; t--; )
{
cin >> n >> s;
int u, v;
for(int i = 0; i <= n; ++i) g[i].clear();
for(int i = 1; i <= n - 1; ++i){
scanf("%d %d", &u, &v);
g[u].push_back(v);
g[v].push_back(u);
}
memset(p, 0, sizeof(p));
dfs(s, -1);
//dfs(s);
for(int i = 1; i <= n; ++i){
printf("%d ", i == s ? -1 : p[i]);
}
printf("\n");
}
return 0;
}