可以看做是简单的二叉树,dfs一下就好了。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=11000;
vector<int> G[maxn];
int dfs(int u)
{
if(G[u].size()==0)
return 1;
if(G[u].size()==1)
return dfs(G[u][0]);
int a=dfs(G[u][0]), b=dfs(G[u][1]);
return max(max(a, b), min(a, b)+1);
}
int main()
{
int n, v;
while(~scanf("%d", &n))
{
for(int i=1; i<=n; i++)
G[i].clear();
for(int i=2; i<=n; i++)
{
scanf("%d", &v);
G[v].push_back(i);
}
printf("%d\n", dfs(1));
}
return 0;
}