【DFS】聚会


思路

其实就是有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);
}

相关文章: