每一颗树的最大高度为高度最大的子树加上该子树的深度。因为只有根节点为0;
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int idx,e[N],ne[N],h[N];
int n;
int cnt[N];
int f[N]; //表示以u为根节点的最大高度
void add(int a,int b)
{
e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
void dfs(int u)
{
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
dfs(j);
f[u]=max(f[u],f[j]+cnt[u]);
}
}
int main()
{
cin>>n;
memset(h,-1,sizeof h);
for(int i=2;i<=n;i++)
{
int a;
cin>>a;
add(a,i);
cnt[a]++;
}
dfs(1);
cout<<f[1]<<endl;
return 0;
}