解题思路:
注意事项:
参考代码:
#include <iostream>
#include <vector>
using namespace std;
vector<int> f[100050];
int dfs(int node) {//node为每一层下标数,从第一层开始遍历
int count = 0;
if (f[node].size() == 0) return 0;//没有子节点,返回
for (int i = 0; i < f[node].size(); i++) {
count = max(count, dfs(f[node][i]));//当前节点和所遍历节点的最大深度
}
return count + f[node].size();//返回当前节点深度加上已经积累的最大深度
}
int main() {
int n;
int t;
cin >> n;
for (int i = 2; i <= n; i++) {
cin >> t;
f[t].push_back(i);//每一层的子节点号码
}
cout << dfs(1);
return 0;
}
0.0分
1 人评分
打水问题 (C语言代码)浏览:1149 |
P1001 (C语言代码)浏览:836 |
哥德巴赫曾猜测 (C语言代码)浏览:2563 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:934 |
字符逆序 (C语言代码)浏览:706 |
1009题解浏览:802 |
1126题解浏览:649 |
星期判断机 (C语言代码)浏览:892 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:438 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:650 |