#include <iostream>
#include <vector>
using namespace std;
const int N = 1e5 + 10, K = 20 + 5;
vector <int> E[N];
int r[N];
int ans_fr_so[N][K], ans_fr_fa[N][K];
int n, k;
void dfs1 (int x, int fa) {
for (int i = 0; i <= k; i ++)
ans_fr_so[x][i] = r[x];
for (auto k : E[x]) {
if (k == fa)
continue;
dfs1(k, x);
for (int i = 1; i <= k; i ++)
ans_fr_so[x][i] += ans_fr_so[k][i - 1];
}
}
void dfs2 (int x, int fa) {
for (auto k : E[x]) {
if (k == fa)
continue;
ans_fr_fa[k][1] += ans_fr_so[x][0];
for (int i = 2; i <= k; i ++)
ans_fr_fa[k][i] += ans_fr_fa[x][i - 1] - ans_fr_so[k][i - 2];
dfs2(k, x);
}
}
signed main () {
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
cin >> n >> k;
for (int i = 1; i < n; i ++) {
int u, v;
cin >> u >> v;
E[u].push_back(v);
E[v].push_back(u);
}
for (int i = 1; i <= n; i ++)
cin >> r[i];
dfs1(1, 0);
for (int i = 1; i <= n; i ++)
for (int j = 0; j <= k; j ++)
ans_fr_fa[i][j] = ans_fr_so[i][j];
dfs2(1, 0);
for (int i = 1; i <= n; i ++)
cout << ans_fr_fa[i][k] << '\n';
return 0;
}
20pts,其他点 TLE5 个 WA 3个