
树的最大高度=父节点孩子的数量+以它的孩子为父节点的子树的最大高度,以此构造递归关系。
#include <bits/stdc++.h>
using namespace std;
int n, tmp;
vector<int>t[100005];
int dfs(int pos){
int cnt = 0;
int sz = t[pos].size();
for(int i = 0; i < sz; i++){
cnt = max(cnt, dfs(t[pos][i]));
}
return cnt + sz;
}
int main(){
cin>>n;
for(int i = 2; i <= n; i++){
cin>>tmp;
t[tmp].push_back(i);
}
int ans = dfs(1);
cout<<ans<<endl;
return 0;
}
该程序使用深度优先搜索(DFS)策略来计算一棵有向树的最大高度。通过对每个节点的遍历,递归地计算以每个节点为根的子树的最大高度,并存储最大值,最后返回根节点的高度加上子树的最大高度即为整棵树的最大高度。
8804

被折叠的 条评论
为什么被折叠?



