思路:只需要从上往下dfs即可。存关系的话,用一个vector存下他的儿子有谁。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+100;
int depth[N];
int mx_depth=1;
vector<int> p[N];
void dfs(int root,int dep)
{
depth[root]=dep;
if(mx_depth<dep) mx_depth=dep;
for(int i=0;i<p[root].size();i++){
dfs(p[root][i],dep+1);
}
}
int main ()
{
int n; scanf("%d",&n);
int root=-1;
for(int i=1;i<=n;i++){
int x; scanf("%d",&x);
p[x].push_back(i);
if(x==-1) root=i;
}
depth[root]=1;
dfs(root,1);
printf("%d\n",mx_depth);
int flag=0;
for(int i=1;i<=n;i++){
if(mx_depth==depth[i] && !flag) printf("%d",i),flag++;
else if(mx_depth==depth[i]) printf(" %d",i);
}
printf("\n");
return 0;
}