思路
其实就是有n个树,DFS求所有树最深的深度即可
#include<cstdio>
#include<iostream>
int n,l,ans=0,tt=0,T=0,t[2002],L[2002];
struct asdf{
int y,next;
} a[2002];
void s(int k,int d){
if(d>ans) ans=d;
for(int i=L[k];i;i=a[i].next)
s(a[i].y,d+1);
}
int main(){
//freopen("party.in","r",stdin);
//freopen("party.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&l);
if(l==-1) t[++T]=i;
else {
a[++tt].y=i;
a[tt].next=L[l];
L[l]=tt;
}
}
for(int i=1;i<=T;++i)
s(t[i],1);
printf("%d",ans);
//fclose(stdin);
//fclose(stdout);
}