时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
给定一棵包含 N 个节点的无根树,小Hi想知道如果指定其中某个节点 K 为根,那么每个节点的父节点是谁?
输入
第一行包含一个整数 N 和 K。1 ≤ N ≤ 1000, 1 ≤ K ≤ N。
以下N-1行每行包含两个整数 a 和 b,代表ab之间存在一条边。 1 ≤ a, b ≤ N。
输入保证是一棵树。
输出
输出一行包含 N 个整数,分别代表1~N的父节点的编号。对于 K 的父节点输出0。
- 样例输入
-
5 4 1 2 3 1 4 3 5 1
- 样例输出
-
3 1 4 0 1
#include <bits/stdc++.h> using namespace std; int n, k, x, y; vector<int>v[1010]; int fa[1010]; void dfs(int f, int k) { for (int i = 0; i < v[k].size(); ++i) { int x = v[k][i]; if (x == f) continue; fa[x] = k; dfs(k , x); } } int main() { cin>>n>>k; for (int i = 1; i < n; ++i) { cin>>x>>y; v[x].push_back(y); v[y].push_back(x); } memset(fa, 0 ,sizeof fa); dfs(-1, k); for (int i = 1; i <= n; ++i) { printf("%d%c",fa[i], i == n ? 10 : ' '); } return 0; }