L2-026 小字辈 (25分)
#include <bits/stdc++.h>
#define int ll
#pragma GCC optimize(2)
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int n;
vector<int > a[maxn];
int ans[maxn];
int de=1,top=0,f;
int dfs(int x,int d){
int num=a[x].size();
if (num==0){
if (de<d) de=d,top=0,ans[top++]=x;
else if (de==d) ans[top++]=x;
} else
for (int i = 0; i < num; ++i)
dfs(a[x][i],d+1);
return 0;
}
void solve() {
cin>>n;
for (int i = 1; i <=n; ++i) {
int t;
cin>>t;
if (t==-1) f=i;
else a[t].push_back(i);
}
dfs(f,1);
cout<<de;
for (int i = 0; i < top; ++i) {
cout<<(i==0?"\n":" ")<<ans[i];
}
}
signed main() {
int _ = 1;
while (_--) {
solve();
}
return 0;
}