[模板] 求父结点与结点深度

A.树之呼吸-壹之型-结点深度及父结点
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 64 (20 users) Total Accepted: 24 (18 users) Special Judge: No
Description

给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;

请你求出每个结点的父结点,以及它的深度;

规定:根节点的深度为 1,根节点的父结点为 0。

Input

输入第一行为一个正整数 T,表示测试数据组数;

对于每组测试数据,输入第一行为两个正整数 n、m,表示树的结点数及根结点的编号;

接下来 n - 1 行给出树的结构,每行两个正整数 x、y,表示结点 x 与结点 y 有边相连;

1 <= T <= 15,1 <= n <= 1e5,1 <= m <= n。

Output

每组测试数据的第一行输出“Case #i:”(不含引号),表示是第 i 组测试数据;

接下来一行依次输出从结点 1 到结点 n 的父结点编号,用空格分隔;

接下来一行依次输出从结点 1 到结点 n 的深度,用空格分隔;

行末请不要输出多余空格。


Sample Input

2

5 1

1 2

1 3

1 4

4 5

3 3

1 2

3 1

Sample Output

Case #1:

0 1 1 1 4

1 2 2 2 3

Case #2:

3 1 0

2 3 1

Author
陈鑫

题意:给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
请你求出每个结点的父结点,以及它的深度;
规定:根节点的深度为 1,根节点的父结点为 0。
思路:BFS求解父结点和深度

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<queue>
 5 using namespace std;
 6 typedef long long ll;
 7 const int amn=1e5+5;
 8 int n,m,fa[amn],deep[amn];
 9 vector<int> eg[amn];
10 queue<int> q;
11 void bfs(int rt){
12     while(q.size())q.pop();q.push(rt);
13     memset(deep,0,sizeof deep);
14     fa[rt]=0;
15     deep[rt]=1;
16     while(q.size()){
17         int u=q.front();q.pop();
18         for(int i=0;i<eg[u].size();i++){
19             int v=eg[u][i];
20             if(deep[v])continue;
21             fa[v]=u;
22             deep[v]=deep[u]+1;
23             q.push(v);
24         }
25     }
26 }
27 int main(){
28     int T,x,y;scanf("%d",&T);
29     for(int C=1;C<=T;C++){
30         for(int i=1;i<=n;i++)eg[i].clear(); ///注意vector在输入前要清空
31         scanf("%d%d",&n,&m);
32         for(int i=1;i<n;i++){
33             scanf("%d%d",&x,&y);
34             eg[y].push_back(x);
35             eg[x].push_back(y);
36         }
37         bfs(m);
38         printf("Case #%d:\n",C);
39         for(int i=1;i<=n;i++)printf("%d%c",fa[i],i<n?' ':'\n');
40         for(int i=1;i<=n;i++)printf("%d%c",deep[i],i<n?' ':'\n');
41     }
42 }
43 /**
44 题意:给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
45 请你求出每个结点的父结点,以及它的深度;
46 规定:根节点的深度为 1,根节点的父结点为 0。
47 思路:BFS求解父结点和深度
48 **/

 

posted @ 2019-11-08 21:08  Railgun000  阅读(330)  评论(0编辑  收藏  举报