http://codeforces.com/problemset/problem/116/C
从树根DFS,看最大能递归几层。
/*30ms,300KB*/
#include<bits/stdc++.h>
using namespace std;
const int mx = 2005;
vector<int> v[mx];
bool fa[mx];
int maxlen;
void dfs(int i, int deep)
{
maxlen = max(maxlen, deep);
for (int j = 0; j < v[i].size(); ++j)
dfs(v[i][j], deep + 1);
}
int main()
{
memset(fa, 1, sizeof(fa));
int n, x;
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> x;
if (x != -1)
{
v[x].push_back(i);
fa[i] = false;
}
}
for (int i = 1; i <= n; ++i)
if (fa[i]) dfs(i, 1);
printf("%d\n", maxlen);
return 0;
}