#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
vector<int>v[100005]; //此时的v已经相当于一个可任意变大小的二维数组
int city[100005];
void DFS(int n)
{
for (int i = 0; i<v[n].size(); ++i) // 和 n 每个相邻的 城市都遍历一次
{
if (city[v[n][i]])
continue;
city[v[n][i]] = n;
DFS(v[n][i]);
}
}
int main()
{
int n, m, t, i, a, b;
scanf("%d", &t);
while (t--)
{
memset(city, 0, sizeof(city));
memset(v, 0, sizeof(v));
scanf("%d%d", &n, &m);
city[m] = -1;
for (i = 0; i<n - 1; i++)
{
scanf("%d%d", &a, &b);
v[a].push_back(b); // a和 b 相连
v[b].push_back(a); // 当然 b 也和 a 相连
}
DFS(m); // 从第几个城市开始
for (i = 1; i <= n; i++)
printf("%d ", city[i]);
printf("\n");
}
return 0;
}
南阳理工20题
最新推荐文章于 2018-03-25 11:03:27 发布