RE求助
查看原帖
RE求助
867904
xinlong666楼主2023/12/3 09:29
#include <bits/stdc++.h>
using namespace std;
int n,k;
int d[100010];
vector<int>ve[100010];
bool vis[100010];
int f[100010][22];
int dp[100010][22];
int dfs(int id,int fa){
	for (int i = 0 ; i < ve[id].size() ; i++){
		int v = ve[id][i];
		if(v == fa)continue;
		dfs(v,id);
		for (int j = 1 ; j <= k ; j ++){
			f[id][j] += f[v][j-1];
		}
	}
}
int dfs2(int id,int fa){
	for (int i = 0 ; i < ve[id].size() ; i++){
		int v = ve[id][i];
		if(v == fa)continue;
		dp[v][1]+=dp[id][0];
		for (int j = 2 ; j <= k ; j ++){
			dp[v][j]+=dp[id][j-1]-f[v][j-2];
		}
		dfs2(v,id);
	}
}
int main(){
	cin >> n >> k;
	for (int i = 1 ; i <= n-1 ; i ++){
		int u,v;
		cin >> u >> v;
		ve[u].push_back(v);
		ve[v].push_back(u);
	}
	for (int i = 1 ; i <= n ; i ++){
		cin >> d[i];
		for (int j = 0 ; j <= k ; j ++){
			f[i][j] = d[i];
		}
	}
	dfs(1,0);
	for (int i = 1 ; i <= n ; i ++){
		for (int j = 0 ;  j<= k ; j ++){
			dp[i][j] = f[i][j];
		}
	}
	dfs2(1,0);
	for (int i = 1 ; i <= n ; i ++){
		cout << dp[i][k] << endl;
	}
	return 0;
}
2023/12/3 09:29
加载中...