就是dfs啦,最近跟dfs杠上了。
时间限制:
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<iostream>
#include<vector>
#include<string.h>
#include<stdio.h>
using namespace std;
vector<int>g[1010];
int N;
int fa[1010],vis[1010];
void dfs(int K)
{
for(int i=0;i<g[K].size();i++)
{
// cout<<"**"<<K<<" "<<g[K][i]<<"***"<<endl;
int son;
son=g[K][i];
if(!vis[son])
{
vis[son]=1;
fa[son]=K;
dfs(son);
}
}
}
int main()
{
int K;
cin>>N>>K;
int u,v;
memset(vis,0,sizeof(vis));
for(int i=1;i<=1010;i++)
{
g[i].clear();
}
for(int i=1;i<=N-1;i++)
{
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
fa[K]=0;
vis[K]=1;
dfs(K);
for(int i=1;i<=N;i++)
{
cout<<fa[i]<<" ";
}
cout<<endl;
return 0;
}