Codeforces 115A
2014-04-30 18:37
295 查看
思路:求树的高度。用并查集,不要压缩路径。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int father[2005], cnt; int max(int x, int y) { return x > y ? x : y; } void init(int n) { for(int i = 1;i <= n;i ++) father[i] = i; } void find(int x) { if(x == father[x]) return; cnt ++; find(father[x]); } void unit(int x, int y) { father[x] = y; return ; } int main(int argc, char const *argv[]) { int n, ans, temp; while(~scanf("%d", &n)) { init(n); for(int i = 1;i <= n;i ++) { scanf("%d", &temp); if(temp != -1) unit(i, temp); } ans = 0; for(int i = 1;i <= n;i ++) { cnt = 0; find(i); ans = max(ans, cnt); } printf("%d\n", ans+1); } return 0; }