根据题目可以看出来 有n 个城市 只有 n-1 条路线 那么 就可以确定这个图中 不存在 圆 所以从一个点到另一个点 只有一条唯一的路 所以从一个节点到另一个节点 那么 这个节点只有一个唯一的上节点
1 /* 偶说不是一种形式 而是一种思想 小伙子当你悟透这句话的时候就没有你不能做的题了. */ 2 #include<stdio.h> 3 #include<vector> 4 #include<string.h> 5 using namespace std; 6 vector<int>v[100005]; // 用不定长数组 去 7 int city[100005]; 8 void DFS(int n) 9 { 10 for(int i=0;i<v[n].size();++i) // 和 n 每个相邻的 城市都遍历一次 11 { 12 if(city[v[n][i]]) 13 continue; 14 city[v[n][i]]=n; 15 DFS(v[n][i]); 16 } 17 } 18 int main() 19 { 20 int n,m,t,i,a,b; 21 scanf("%d",&t); 22 while(t--) 23 { 24 memset(city,0,sizeof(city)); 25 memset(v,0,sizeof(v)); 26 scanf("%d%d",&n,&m); 27 city[m]=-1; 28 for(i=0;i<n-1;i++) 29 { 30 scanf("%d%d",&a,&b); 31 v[a].push_back(b); // a和 b 相连 32 v[b].push_back(a); // 当然 b 也和 a 相连 33 } 34 DFS(m); // 从第几个城市开始 35 for(i=1;i<=n;i++) 36 printf("%d ",city[i]); 37 printf(" "); 38 } 39 return 0; 40 }