zoukankan      html  css  js  c++  java
  • [模板] 求父结点与结点深度

    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:
    ",C);
    39         for(int i=1;i<=n;i++)printf("%d%c",fa[i],i<n?' ':'
    ');
    40         for(int i=1;i<=n;i++)printf("%d%c",deep[i],i<n?' ':'
    ');
    41     }
    42 }
    43 /**
    44 题意:给一棵 n 个结点的树,结点编号从 1 到 n,并指定 m 号结点为根;
    45 请你求出每个结点的父结点,以及它的深度;
    46 规定:根节点的深度为 1,根节点的父结点为 0。
    47 思路:BFS求解父结点和深度
    48 **/
  • 相关阅读:
    20145236 《Java程序设计》 第6周学习总结
    20145236 《Java程序设计》第4周学习总结
    20145236 冯佳 《Java程序设计》第3周学习总结
    20145236 冯佳 《Java程序设计》第2周学习总结
    《Java程序设计》实验三 实验报告
    20145202马超 《Java程序设计》第九周学习总结
    20145202马超 《Java程序设计》第八周学习总结
    20145202马超 实验二《Java面向对象程序设计》实验报告
    20145202马超 《Java程序设计》第七周学习总结
    20145202马超 《Java程序设计》第六周学习总结
  • 原文地址:https://www.cnblogs.com/Railgun000/p/11823290.html
Copyright © 2011-2022 走看看