题目链接:http://codeforces.com/problemset/problem/115/A
题目大意: 每个人都有一个或者没有直属上司,现在想举办一个party,这个party要求参加的人人人平等不存在上下级关系。 问最少要分几组?
思路:
其实就是每个人都有一个或者没有父亲节点,我们要让同深度的人组成一个队伍就可以。 即就是找树的最大深度
AC代码:
1 #include <cstdio> 2 #include <string> 3 #include <iostream> 4 #include <algorithm> 5 #include <string.h> 6 #include <math.h> 7 8 using namespace std; 9 10 const int maxn = 2005; 11 12 int fa[maxn]; 13 int temp = 0; 14 15 void dfs(int i) 16 { 17 if (i == -1) 18 return ; 19 else 20 { 21 temp++; 22 dfs(fa[i]); 23 } 24 } 25 26 27 28 int main() 29 { 30 int n,sum = 0; 31 cin >> n; 32 for (int i=1;i<=n;i++) 33 { 34 cin >> fa[i]; 35 } 36 for (int i=1;i<=n;i++) 37 { 38 temp = 0; 39 dfs(i); 40 sum = max(sum,temp); 41 } 42 printf("%d ",sum); 43 return 0; 44 }