天梯小字辈
Posted karshey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了天梯小字辈相关的知识,希望对你有一定的参考价值。
输入:
9
2 6 5 5 -1 5 6 4 7
输出:
4
1 9
DFS。
代码:
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
vector<int>father[N];
int level[N],ans=0;//某个序号的层数
void DFS(int x,int deep)
{
ans=max(ans,deep);//记录最大层数
for(int i=0;i<father[x].size();i++)
{
level[father[x][i]]=deep+1;//这里的孩子在当前层数的第二层
DFS(father[x][i],deep+1);//试着往下搜
}
return;
}
int main()
{
//1号位数字为2,则2是1的爹
int n,t,root;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>t;
if(t==-1)
{
root=i;
level[i]=1;//这是祖宗,是第一层
continue;
}
father[t].push_back(i);//放进去的是儿子的序号
}
DFS(root,1);//从 祖宗开始搜
cout<<ans<<endl;//最大层
int flag=0;//注意格式
for(int i=1;i<=n;i++)
{
if(level[i]==ans)//是最小辈的
{
if(!flag)//第一个
{
flag++;
cout<<i;
}
else//不是第一个
{
cout<<" "<<i;
}
}
}
return 0;
}
以上是关于天梯小字辈的主要内容,如果未能解决你的问题,请参考以下文章