PAT-L2-026(小字辈)(bfs)

原创 2018年04月17日 17:20:19

题目链接:https://www.patest.cn/contests/gplt/L2-026

L2-026. 小字辈

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
陈越

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。

输入格式:

输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。

输出格式:

首先输出最小的辈分(老祖宗的辈分为 1,以下逐级递增)。然后在第二行按递增顺序输出辈分最小的成员的编号。编号间以一个空格分隔,行首尾不得有多余空格。

输入样例:
9
2 6 5 5 -1 5 6 4 7
输出样例:
4
1 9

思路:直接用bfs,求出每个点的辈分及这个点的父母和子孙。再遍历一遍整个数组,找出辈分最大的点即可

上代码:

#include<cstdio>
#include<queue>
#include<cstdlib>
using namespace std;
int a[100010];
int res[100010];
typedef struct
{
   int ceng;
   int pre;
   vector<int> son;
}  peo;
peo p[100010];
void bfs(int x)
{
   queue<peo> q;
   q.push(p[x]);
   while(!q.empty())
   {
      peo tem=q.front();
      q.pop();
      for(int i=0;i<tem.son.size();i++)
      {
         int no=tem.son[i];
         p[no].ceng=tem.ceng+1;
         q.push(p[no]);
      }
   }
}  
int main()
{
    int n,index;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==-1)
        {
           index=i;
        }
        p[i].ceng=1;
        p[i].pre=a[i];
        if(a[i]!=-1)
        {
           p[a[i]].son.push_back(i);   
        }
    }
    bfs(index);
    int maxceng=1;
    for(int i=1;i<=n;i++)
    {
       if(p[i].ceng>maxceng)
       maxceng=p[i].ceng;
    }
    printf("%d\n",maxceng);
    int u=0;
    for(int i=1;i<=n;i++)
    {
       if(p[i].ceng==maxceng)
       res[u++]=i;
    }
    for(int i=0;i<u-1;i++)
    {
       printf("%d ",res[i]);
    }
    printf("%d",res[u-1]);
   // system("pause");
    return 0;
}

L2-026小字辈

L2-026. 小字辈时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给...
  • qq_37867156
  • qq_37867156
  • 2018-04-11 23:06:05
  • 19

PAT天梯赛 L2-026. 小字辈 【BFS】

题目链接 https://www.patest.cn/contests/gplt/L2-026 思路 用一个二维vector 来保存 每个人的子女 然后用BFS 广搜下去,当目前的状态 是...
  • Dup4plz
  • Dup4plz
  • 2018-04-04 22:57:57
  • 26

L2-026. 小字辈(DFS)

L2-026. 小字辈时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给...
  • wbb1997
  • wbb1997
  • 2018-04-16 19:35:02
  • 1

PAT-L2-026小字辈AC代码

L2-026. 小字辈时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给...
  • qq_40748639
  • qq_40748639
  • 2018-04-02 23:46:49
  • 118

gplt L2-026. 小字辈(bfs)

话不多说 10钟的事 贴代码#include&amp;lt;bits/stdc++.h&amp;gt; //L2-026. 小字辈(bfs stl) using namespace std; /...
  • qq_37206717
  • qq_37206717
  • 2018-04-01 15:33:01
  • 65

小字辈(递归??)

题目链接:https://www.patest.cn/contests/gplt/L2-026L2-026. 小字辈时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Stan...
  • qq_40482358
  • qq_40482358
  • 2018-04-02 23:08:05
  • 31

gplt 2018.3.31

首先说书感想大二才参加第一次天梯赛 有点慌 毕竟一个人三个小时打这么多题目比赛前自己就刷了L1L2 然后别人都把L3刷完了 而且似乎手速越来越慢 内心越来越没斗志 反正就是一堆不好的预兆赛前还和队友(...
  • qq_37206717
  • qq_37206717
  • 2018-04-01 15:22:57
  • 34

2018天梯赛_L2-026. 小字辈

传送门 思路:只需要从上往下dfs即可。存关系的话,用一个vector存下他的儿子有谁。 #include&amp;lt;bits/stdc++.h&amp;gt; using namespace...
  • yyy_3y
  • yyy_3y
  • 2018-04-08 15:44:53
  • 22

L2-026. 小字辈

本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出...
  • nihaopeng521
  • nihaopeng521
  • 2018-04-04 09:40:12
  • 32

PAT - 天梯赛 L2-026 小字辈 (vector模拟)

L2-026. 小字辈时间限制400 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给...
  • yf224
  • yf224
  • 2018-04-05 11:54:22
  • 29
收藏助手
不良信息举报
您举报文章:PAT-L2-026(小字辈)(bfs)
举报原因:
原因补充:

(最多只允许输入30个字)