http://codeforces.com/problemset/problem/115/A
每个人有0或1个直系上司。
现在要分组,问最少几组,使得每组里面成员没有上司关系(直接、间接)。
题目要求要每一组人都没有父子关系,即每棵树的一层取一个。
也就是给一片森林,求最大深度。
深搜求最大深度。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
typedef long long ll;
const int maxn=2005;
const int INF=1<<30;
int n;
int a[maxn];
int ans=0;
void dfs(int x,int s){
if (x==-1) return;
ans=max(ans,s);
dfs(a[x],s+1);
}
int main(){
cin >> n;
for (int i=1;i<=n;i++){
cin >> a[i];
}
for (int i=1;i<=n;i++){
dfs(i,1);
}
cout << ans << endl;
}