#include <bits/stdc++.h>
using namespace std;
void executeTime() {
cerr << "Time Taken: " << (float)clock() / CLOCKS_PER_SEC << " secs";
}
int main() {
int n; cin >> n;
vector<vector<int>> mp(n + 1);
for (int i = 0; i < n - 1; i++) {
int u, v; cin >> u >> v;
mp[u].push_back(v);
mp[v].push_back(u);
}
vector<int> val(n + 1);
for (int i = 1; i <= n; i++) {
cin >> val[i];
}
vector<int> dp(n + 1);
function<void(int, int)> solve = [&](int src, int p) {
dp[src] = 0;
for (auto &v : mp[src]) {
if (v == p) continue;
solve(v, src);
dp[src] = max(dp[src], dp[v]);
}
dp[src] += val[src];
return;
};
solve(1, -1);
for (int i = 1; i <= n; i++) {
cout << dp[i] << endl;
}
executeTime();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2b2lkIGV4ZWN1dGVUaW1lKCkgewogICAgY2VyciA8PCAiVGltZSBUYWtlbjogIiA8PCAoZmxvYXQpY2xvY2soKSAvIENMT0NLU19QRVJfU0VDIDw8ICIgc2VjcyI7Cn0KCmludCBtYWluKCkgewoKICAgIGludCBuOyBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IG1wKG4gKyAxKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG4gLSAxOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKCiAgICAgICAgbXBbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIG1wW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KCgogICAgdmVjdG9yPGludD4gdmFsKG4gKyAxKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gdmFsW2ldOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGRwKG4gKyAxKTsKCiAgICBmdW5jdGlvbjx2b2lkKGludCwgaW50KT4gc29sdmUgPSBbJl0oaW50IHNyYywgaW50IHApIHsKCiAgICAgICAgZHBbc3JjXSA9IDA7CgogICAgICAgIGZvciAoYXV0byAmdiA6IG1wW3NyY10pIHsKICAgICAgICAgICAgaWYgKHYgPT0gcCkgY29udGludWU7CgogICAgICAgICAgICBzb2x2ZSh2LCBzcmMpOwogICAgICAgICAgICBkcFtzcmNdID0gbWF4KGRwW3NyY10sIGRwW3ZdKTsKICAgICAgICB9ICAgIAoKICAgICAgICBkcFtzcmNdICs9IHZhbFtzcmNdOwoKICAgICAgICByZXR1cm47CiAgICB9OwoKICAgIHNvbHZlKDEsIC0xKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBjb3V0IDw8IGRwW2ldIDw8IGVuZGw7CiAgICB9CgogICAgZXhlY3V0ZVRpbWUoKTsKICAgIHJldHVybiAwOwp9