PTA 小字辈

L2-026 小字辈 (25 分)

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

输入格式:

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

输出格式:

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

输入样例:

#include
#include
#include
#include
using namespace std;int n,maxn=0,r[100005];
queueq;
vectorv[100005];void bfs(int old){q.push(old);r[old]=1;while(!q.empty()){int a=q.front();q.pop();for(int i=0;imaxn)maxn=r[v[a][i]];q.push(v[a][i]);}}
}int main(){int x,old,cnt=0;scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&x);if(x==-1)old=i;elsev[x].push_back(i);}if(n==1)printf("1\n1\n");else{bfs(old);printf("%d\n",maxn);for(int i=1;i<=n;i++){if(r[i]==maxn){if(cnt)printf(" ");printf("%d",i);cnt++;}}printf("\n");}return 0;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部