<span style="font-family: Arial, Helvetica, sans-serif;">/*******************************************</span>
FileName:
Author:苏相学
Date:2016年6月25日11:01:56
Description:给你一个图,让你写出每个顶点必须经过的前一个顶点,这个图比较特殊是一个最简连通图
Others:用vector来建图,把每个连通的边都push_back,因为是无向的所以两个顶点都要push_back,
然后直接从给定的起始顶点开始dfs找到下一个顶点,先判断是不是同一条边,不是则保存pre的值,然后继续dfs
********************************************/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cstdlib>
#include <vector>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 105;
vector<int> vec[100005];
int pre[100005];
void dfs(int x,int ans)
{
int i;
for(i=0;i<vec[x].size();i++){
int v=vec[x][i];
if(v!=ans){ //这个是判断是不是同一条边
pre[v]=x;
dfs(v,pre[v]);
}
}
}
int main()
{
int m,s,n,a,b,i;
scanf("%d",&m);
while(m--)
{
memset(pre,0,sizeof(pre));
memset(vec,0,sizeof(vec));
scanf("%d%d",&n,&s);
for(i=1;i<n;i++){
scanf("%d%d",&a,&b);
vec[a].push_back(b);
vec[b].push_back(a);
}
pre[s]=-1;
dfs(s,-1);
for(i=1;i<=n;i++)
printf("%d ",pre[i]);
printf("\n");
}
return 0;
}