统计人数
考点:树形 d p dp dp
思路:
从根结点出发一直深度优先遍历,记dfs(u)
表示计算u
团队中的人数并存到全局变量f[u]
里,记得u
本身也属于。
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int n;
int h[N], ne[N], e[N], idx;
int ans[N];
void add(int a, int b){
e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
void dfs(int u){
for(int i = h[u]; ~i; i = ne[i]){
int j = e[i];
dfs(j);
ans[u] += ans[j];
}
}
int main(){
cin >> n;
memset(h, -1, sizeof h);
me
for(int i = 1; i <= n - 1; i ++ ){
int x;
cin >> x;
add(x, i + 1);
}
dfs(1);
for(int i = 1; i <= n; i ++ ){
cout << ans[i] << " ";
}
}