80分求助
查看原帖
80分求助
501652
LCY0921楼主2022/7/25 15:41
#include<bits/stdc++.h>
using namespace std;
int n;
int head[200005];
struct relationship{
	int to;
	int last;
};
int dp[200005];//硬币数量 
int num[200005];//下属数量 
relationship work[200005];
int find(int x){
	if(dp[x]!=0) return dp[x];
	if(head[x]==0){
		num[x]=1;
		return dp[x]=1;
	}
	else{
		int h=0;
		for(int i=head[x];i!=0;i=work[i].last){
			h+=find(work[i].to);
			num[x]+=num[work[i].to];
			
		}
		num[x]++;
		h+=num[x];
		return dp[x]=h;
	}
}
int main(){
	scanf("%d",&n);
	for(int i=2;i<=n;i++){
		int x;
		scanf("%d",&x);
		work[i].last=head[x];
		head[x]=i;
		work[i].to=i;
	}
	for(int i=1;i<=n;i++){
		printf("%d ",find(i));
	}
	return 0;
}
2022/7/25 15:41
加载中...