1 #include<queue> 2 #include<vector> 3 #include<cstdio> 4 #include<cstring> 5 #include<iostream> 6 using namespace std; 7 queue<int> q; 8 int f[100010]; 9 vector<int> m[100010];//不能用二维数组,否则一直超内存,用vector定义二维数组虽然不超内存,但超时,因为它在定义是很耗时间 10 int main() 11 { 12 int i,a,b,k,len,n,start,T; 13 scanf("%d",&T); 14 while(T--) 15 { 16 scanf("%d%d",&n,&start); 17 for(i=1;i<=n;++i)//记得清空啊! 18 m[i].clear(); 19 for(i=1;i<n;++i){ 20 scanf("%d%d",&a,&b); 21 m[a].push_back(b); 22 m[b].push_back(a); 23 } 24 q.push(start); 25 f[start]=-1; 26 while(!q.empty()){//一般的bfs 27 k=q.front(); 28 q.pop(); 29 len=m[k].size(); 30 for(i=0;i<len;++i) 31 if(!f[m[k][i]]){ 32 q.push(m[k][i]); 33 f[m[k][i]]=k; 34 } 35 } 36 for(i=1;i<n;++i) 37 printf("%d ",f[i]); 38 printf("%d\n",f[i]); 39 memset(f,0,sizeof(f));//注意清零 40 } 41 //system("pause"); 42 return 0; 43 } 44