解题思路:
注意事项:
参考代码:
#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语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:816 |
C语言训练-求矩阵的两对角线上的元素之和 (C语言代码)浏览:3396 |
C语言训练-大、小写问题 (C语言代码)浏览:2357 |
【亲和数】 (C语言代码)浏览:859 |
输出正反三角形 (C语言代码)浏览:794 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:524 |
C语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:578 |
【计算球体积】 (C语言代码)浏览:1106 |
用筛法求之N内的素数。 (C语言代码)浏览:669 |
文科生的悲哀 (C语言代码)浏览:1401 |