#include <iostream>
#include <cstring>
using namespace std;
const int N = 100010, M = 200010;
int f[N][21];
int e[M], ne[M], h[N], idx;
int n, m;
void insert(int u, int v) {
e[idx] = v, ne[idx] = h[u], h[u] = idx++;
}
void dfs1(int u, int fa) {
for (int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if (j == fa) continue;
dfs1(j, u);
for (int k = 1; k <= m; k++)
f[u][k] += f[j][k - 1];
}
}
void dfs2(int u, int fa) {
for (int i = h[u]; ~i; i = ne[i]) {
int j = e[i];
if (j == fa) continue;
for (int k = m; ~k; k--) {
if (k >= 1) f[j][k] += f[u][k - 1];
if (k >= 2) f[j][k] -= f[j][k - 2];
}
dfs2(j, u);
}
for (int j = 1; j <= m; j++)
f[u][j] += f[u][j - 1];
}
int main() {
scanf("%d%d", &n, &m);
memset(h, -1, sizeof h);
for (int i = 1; i < n; i++) {
int u, v;
scanf("%d%d", &u, &v);
insert(u, v), insert(v, u);
}
for (int i = 1; i <= n; i++)
scanf("%d", &f[i][0]);
dfs1(1, -1);
dfs2(1, -1);
for (int i = 1; i <= n; i++)
printf("%d\n", f[i][m]);
return 0;
}
作者:呼呼喵
链接:https://www.acwing.com/file_system/file/content/whole/index/content/5508519/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。