记忆化搜索。求每一个点到源的距离,记录最大值。
#include<iostream>
#include<cstring>
using namespace std;
int from[1005];
int n;
int record[1005];//记录i到源的长度
int maxlen,len;
int dfs(int x)
{
long long ans=0;
if(record[x]!=-1)
return record[x];
if(from[x]==0)
{
return 1;
}
else{
ans++;
ans+=dfs(from[x]);//追踪i的上一个到源的距离
record[x]=ans;
return ans;
}
}
int main()
{
cin>>n;
memset(record,-1,sizeof(record));
for(int i=1;i<=n;++i)
{
cin>>from[i];
}
//cout<<dfs(4)<<endl;
for(int i=1;i<=n;++i)
{
len=dfs(i);//求i到源的长度
if(len>maxlen)
maxlen=len;
len=0;
}
cout<<maxlen<<endl;
return 0;
}