题目
分析
就是并查集然后求一棵树的深度。。。
代码
#include<bits/stdc++.h> using namespace std; int n,a[2005],f[2005],ans,k[2005]; int dfs(int x) { if(k[x]>0) return k[x]; if(f[x]==0) { k[x]=1; return k[x]; } k[x]=dfs(f[x])+1; return k[x]; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { if(a[i]!=-1) f[i]=a[i]; } for(int i=1;i<=n;i++) ans=max(ans,dfs(i)); cout<<ans; return 0; }