题目链接
解题思路:
dfs 求树的深度 然后求 深度最大的 孩子
代码如下:
#include<iostream>
#include<vector>
using namespace std;
const int maxn=1e5+10;
vector<int> a[maxn];
vector<int> b;
int c[maxn];
int maxx;
void dfs(int x)
{
int i;
if(a[x].empty())//没有儿子了,即最小辈分
{
maxx=max(maxx,c[x]);
return;
}
for(i=0;i<a[x].size();i++)
{
c[a[x][i]]=c[x]+1;//辈分加1
dfs(a[x][i]);//往下面搜
}
}
int main()
{
int i,j,n;
int x,y,k,ans=0,flag=0;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>x;
c[i]=1;
if(x!=-1)
a[x].push_back(i);
else
y=i;
}
dfs(y);//从老祖宗开始搜
cout<<maxx<<endl;
for(i=1;i<=n;i++)
{
if(c[i]==maxx)
{
if(flag)
cout<<" "<<i;
else
{
cout<<i;
flag=1;
}
}
}
cout<<endl;
return 0;
}