#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
// Fast I/O
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
if (!(cin >> n)) return 0;
vector<int> val(n + 1);
vector<vector<int>> adj(n + 1);
vector<int> ans(n + 1, 0);
vector<bool> visited(n + 1, false);
// Read the values (0 or 1) for each node
for (int i = 1; i <= n; ++i) {
cin >> val[i];
}
// Read the N-1 edges and build the adjacency list
for (int i = 0; i < n - 1; ++i) {
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
// Initialize BFS Queue with the root node
queue<int> q;
q.push(1);
visited[1] = true;
// The root's path sum is just its own value
ans[1] = val[1];
// Standard BFS traversal
while (!q.empty()) {
int current = q.front();
q.pop();
// Check all connected neighbors
for (int neighbor : adj[current]) {
if (!visited[neighbor]) {
visited[neighbor] = true;
// Child's accumulated total = Parent's accumulated total + Child's value
ans[neighbor] = ans[current] + val[neighbor];
q.push(neighbor);
}
}
}
// Print the result for each node
for (int i = 1; i <= n; ++i) {
if (i == 1) {
cout << ans[i];
} else {
cout << " " << ans[i];
}
}
cout << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8cXVldWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CiAgICAvLyBGYXN0IEkvTwogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKE5VTEwpOwoKICAgIGludCBuOwogICAgaWYgKCEoY2luID4+IG4pKSByZXR1cm4gMDsKCiAgICB2ZWN0b3I8aW50PiB2YWwobiArIDEpOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobiArIDEpOwogICAgdmVjdG9yPGludD4gYW5zKG4gKyAxLCAwKTsKICAgIHZlY3Rvcjxib29sPiB2aXNpdGVkKG4gKyAxLCBmYWxzZSk7CgogICAgLy8gUmVhZCB0aGUgdmFsdWVzICgwIG9yIDEpIGZvciBlYWNoIG5vZGUKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgIGNpbiA+PiB2YWxbaV07CiAgICB9CgogICAgLy8gUmVhZCB0aGUgTi0xIGVkZ2VzIGFuZCBidWlsZCB0aGUgYWRqYWNlbmN5IGxpc3QKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbiAtIDE7ICsraSkgewogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgfQoKICAgIC8vIEluaXRpYWxpemUgQkZTIFF1ZXVlIHdpdGggdGhlIHJvb3Qgbm9kZQogICAgcXVldWU8aW50PiBxOwogICAgcS5wdXNoKDEpOwogICAgdmlzaXRlZFsxXSA9IHRydWU7CiAgICAKICAgIC8vIFRoZSByb290J3MgcGF0aCBzdW0gaXMganVzdCBpdHMgb3duIHZhbHVlCiAgICBhbnNbMV0gPSB2YWxbMV07CgogICAgLy8gU3RhbmRhcmQgQkZTIHRyYXZlcnNhbAogICAgd2hpbGUgKCFxLmVtcHR5KCkpIHsKICAgICAgICBpbnQgY3VycmVudCA9IHEuZnJvbnQoKTsKICAgICAgICBxLnBvcCgpOwoKICAgICAgICAvLyBDaGVjayBhbGwgY29ubmVjdGVkIG5laWdoYm9ycwogICAgICAgIGZvciAoaW50IG5laWdoYm9yIDogYWRqW2N1cnJlbnRdKSB7CiAgICAgICAgICAgIGlmICghdmlzaXRlZFtuZWlnaGJvcl0pIHsKICAgICAgICAgICAgICAgIHZpc2l0ZWRbbmVpZ2hib3JdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gQ2hpbGQncyBhY2N1bXVsYXRlZCB0b3RhbCA9IFBhcmVudCdzIGFjY3VtdWxhdGVkIHRvdGFsICsgQ2hpbGQncyB2YWx1ZQogICAgICAgICAgICAgICAgYW5zW25laWdoYm9yXSA9IGFuc1tjdXJyZW50XSArIHZhbFtuZWlnaGJvcl07CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHEucHVzaChuZWlnaGJvcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLy8gUHJpbnQgdGhlIHJlc3VsdCBmb3IgZWFjaCBub2RlCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICBpZiAoaSA9PSAxKSB7CiAgICAgICAgICAgIGNvdXQgPDwgYW5zW2ldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvdXQgPDwgIiAiIDw8IGFuc1tpXTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8ICJcbiI7CgogICAgcmV0dXJuIDA7Cn0=