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;
}









