// March 13
// Google SWE Tree DP - Easier Version
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
private static void dfs(int node, ArrayList<Integer>[] G, int[] color, boolean[] used, int[] parent, long[] dp, int[] c) {
used[node] = true;
for(int neighbor : G[node]) {
if(!used[neighbor]) {
parent[neighbor] = node;
dfs(neighbor, G, color, used, parent, dp, c);
}
}
for(int neighbor : G[node]) {
if(neighbor != parent[node]) {
dp[node] += dp[neighbor] + c[neighbor];
c[node] += c[neighbor];
}
}
if(color[node] == 1) {
c[node]++;
}
}
public static void main
(String[] args
) {
Scanner scanner
= new Scanner
(System.
in);
int n = scanner.nextInt();
int[] color = new int[n + 1];
for(int i = 1; i <= n; i++) {
color[i] = scanner.nextInt();
}
ArrayList
<Integer
>[] G
= new ArrayList[n
+ 1];
for (int i = 0; i <= n; i++) {
G[i] = new ArrayList<>();
}
for (int i = 1; i <= n - 1; i++) {
int u = scanner.nextInt();
int v = scanner.nextInt();
G[u].add(v);
G[v].add(u);
}
boolean[] used = new boolean[n+1];
int[] parent = new int[n+1];
long[] dp = new long[n+1];
int[] c = new int[n+1];
dfs(1, G, color, used, parent, dp, c);
for(int i = 1; i <= n; i++) {
System.
out.
println(i
+ ": " + dp
[i
]); }
}
}
Ly8gTWFyY2ggMTMKLy8gR29vZ2xlIFNXRSBUcmVlIERQIC0gRWFzaWVyIFZlcnNpb24KCmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CgpwdWJsaWMgY2xhc3MgTWFpbiB7CgogICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBkZnMoaW50IG5vZGUsIEFycmF5TGlzdDxJbnRlZ2VyPltdIEcsIGludFtdIGNvbG9yLCBib29sZWFuW10gdXNlZCwgaW50W10gcGFyZW50LCBsb25nW10gZHAsIGludFtdIGMpIHsKCiAgICAgICAgdXNlZFtub2RlXSA9IHRydWU7CgogICAgICAgIGZvcihpbnQgbmVpZ2hib3IgOiBHW25vZGVdKSB7CiAgICAgICAgICAgIGlmKCF1c2VkW25laWdoYm9yXSkgewogICAgICAgICAgICAgICAgcGFyZW50W25laWdoYm9yXSA9IG5vZGU7CiAgICAgICAgICAgICAgICBkZnMobmVpZ2hib3IsIEcsIGNvbG9yLCB1c2VkLCBwYXJlbnQsIGRwLCBjKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yKGludCBuZWlnaGJvciA6IEdbbm9kZV0pIHsKICAgICAgICAgICAgaWYobmVpZ2hib3IgIT0gcGFyZW50W25vZGVdKSB7CiAgICAgICAgICAgICAgICBkcFtub2RlXSArPSBkcFtuZWlnaGJvcl0gKyBjW25laWdoYm9yXTsKICAgICAgICAgICAgICAgIGNbbm9kZV0gKz0gY1tuZWlnaGJvcl07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmKGNvbG9yW25vZGVdID09IDEpIHsKICAgICAgICAgICAgY1tub2RlXSsrOwogICAgICAgIH0KCiAgICB9CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CgogICAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CgogICAgICAgIGludCBuID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgaW50W10gY29sb3IgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICAKICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBjb2xvcltpXSA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgIH0KCiAgICAgICAgQXJyYXlMaXN0PEludGVnZXI+W10gRyA9IG5ldyBBcnJheUxpc3RbbiArIDFdOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgR1tpXSA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIH0KCiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbiAtIDE7IGkrKykgewogICAgICAgICAgICBpbnQgdSA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgICAgICBpbnQgdiA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgICAgICBHW3VdLmFkZCh2KTsKICAgICAgICAgICAgR1t2XS5hZGQodSk7CiAgICAgICAgfQoKICAgICAgICBib29sZWFuW10gdXNlZCA9IG5ldyBib29sZWFuW24rMV07CiAgICAgICAgaW50W10gcGFyZW50ID0gbmV3IGludFtuKzFdOwogICAgICAgIGxvbmdbXSBkcCA9IG5ldyBsb25nW24rMV07CiAgICAgICAgaW50W10gYyA9IG5ldyBpbnRbbisxXTsKCiAgICAgICAgZGZzKDEsIEcsIGNvbG9yLCB1c2VkLCBwYXJlbnQsIGRwLCBjKTsKCiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGkgKyAiOiAiICsgZHBbaV0pOwogICAgICAgIH0KICAgIH0KfQo=