90 pts RE on #5 求救
查看原帖
90 pts RE on #5 求救
1041850
chenjunnan楼主2025/8/3 09:51
#include<bits/stdc++.h>
#define ll long long
#define f(i,a,b,n) for(int i=a;i<=b;i+=n)
#define ff(i,a,b,n) for(int i=a;i>=b;i-=n)
#define p(a,b) make_pair(a,b)
using namespace std;
int n,K,x,y,p;
ll dp[100005][25],f[100005][25];
vector<int> tree[100005];
void dfs(int k,int fa){
	f(i,1,K,1) f[k][i]+=f[k][0];
	f(i,0,tree[k].size()-1,1){
		int v=tree[k][i];
		if(v==fa) continue;
		dfs(v,k);
		f(j,1,K,1) f[k][j]+=f[v][j-1];
	}
}
void finds(int k,int fa){
	f(i,0,tree[k].size()-1,1){
		int v=tree[k][i];
		if(v==fa) continue;
		dp[v][1]+=f[k][0];
		f(i,2,K,1) dp[v][i]+=dp[k][i-1]-f[v][i-2];
		finds(v,k);
	}
}
int main(){
	scanf("%d%d",&n,&K);
	f(i,1,n-1,1){
		scanf("%d%d",&x,&y);
		tree[x].push_back(y);
		tree[y].push_back(x);
	}
	f(i,1,n,1) scanf("%lld",&f[i][0]);
	dfs(1,0);
	memcpy(dp,f,sizeof(dp));
	finds(1,0);
	f(i,1,n,1) printf("%lld\n",dp[i][K]);
	return 0;
}
2025/8/3 09:51
加载中...