代码实现
/*
p数组:用来存放节点i的父节点
root:用来指定根节点是哪个
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+10;
int p[maxn];
vector<int> g[maxn];
void dfs(int u,int fa){
int s = g[u].size();
for(int i = 0; i < s; i++){
int v = g[u][i];
if(v!=fa) dfs(v,p[v]=u);
}
}
int main(void){
int n;
cin >> n;
for(int i = 1; i < n; i++){
int u,v;
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
int root = 1;
p[root] = -1;
dfs(root,-1);
for(int i = 0; i < n; i++){
if(i==root) cout<<"root is "<<i<<" father is "<<p[i]<<endl;
else{
cout<<"The father of "<<i<<" is "<<p[i]<<endl;
}
}
return 0;
}