import java.util.*;
public class Main {
static long[] sum;
static int[] b;
public static void DFS(int node, ArrayList<Integer>[] G, int[] used, int[] parent) {
used[node] = 1;
for (int u : G[node]) {
if (used[u] == 0) {
parent[u] = node;
DFS(u, G, used, parent);
}
}
long s = 0;
for (int child : G[node]) {
if (child == parent[node]) continue;
s += sum[child];
}
sum[node] = b[node] + s;
}
public static void main
(String[] args
) { Scanner scanner
= new Scanner
(System.
in);
int n = scanner.nextInt();
sum = new long[n + 1];
b = new int[n + 1];
for (int i = 1; i <= n; i++) {
b[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);
}
int[] used = new int[n + 1];
int[] parent = new int[n + 1];
DFS(1, G, used, parent);
long answer
= Long.
MIN_VALUE; for (int i = 1; i <= n; i++) {
answer
= Math.
max(answer, sum
[i
]); }
}
}
CmltcG9ydCBqYXZhLnV0aWwuKjsKCnB1YmxpYyBjbGFzcyBNYWluIHsKCiAgICBzdGF0aWMgbG9uZ1tdIHN1bTsKICAgIHN0YXRpYyBpbnRbXSBiOwoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBERlMoaW50IG5vZGUsIEFycmF5TGlzdDxJbnRlZ2VyPltdIEcsIGludFtdIHVzZWQsIGludFtdIHBhcmVudCkgewogICAgICAgIHVzZWRbbm9kZV0gPSAxOwoKICAgICAgICBmb3IgKGludCB1IDogR1tub2RlXSkgewogICAgICAgICAgICBpZiAodXNlZFt1XSA9PSAwKSB7CiAgICAgICAgICAgICAgICBwYXJlbnRbdV0gPSBub2RlOwogICAgICAgICAgICAgICAgREZTKHUsIEcsIHVzZWQsIHBhcmVudCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGxvbmcgcyA9IDA7CiAgICAgICAgZm9yIChpbnQgY2hpbGQgOiBHW25vZGVdKSB7CiAgICAgICAgICAgIGlmIChjaGlsZCA9PSBwYXJlbnRbbm9kZV0pIGNvbnRpbnVlOwogICAgICAgICAgICBzICs9IHN1bVtjaGlsZF07CiAgICAgICAgfQoKICAgICAgICBzdW1bbm9kZV0gPSBiW25vZGVdICsgczsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFNjYW5uZXIoU3lzdGVtLmluKTsKCiAgICAgICAgaW50IG4gPSBzY2FubmVyLm5leHRJbnQoKTsKICAgICAgICBzdW0gPSBuZXcgbG9uZ1tuICsgMV07CiAgICAgICAgYiA9IG5ldyBpbnRbbiArIDFdOwoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICAgICAgYltpXSA9IHNjYW5uZXIubmV4dEludCgpOwogICAgICAgIH0KCiAgICAgICAgQXJyYXlMaXN0PEludGVnZXI+W10gRyA9IG5ldyBBcnJheUxpc3RbbiArIDFdOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IG47IGkrKykgewogICAgICAgICAgICBHW2ldID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuIC0gMTsgaSsrKSB7CiAgICAgICAgICAgIGludCB1ID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgICAgIGludCB2ID0gc2Nhbm5lci5uZXh0SW50KCk7CiAgICAgICAgICAgIEdbdV0uYWRkKHYpOwogICAgICAgICAgICBHW3ZdLmFkZCh1KTsKICAgICAgICB9CgogICAgICAgIGludFtdIHVzZWQgPSBuZXcgaW50W24gKyAxXTsKICAgICAgICBpbnRbXSBwYXJlbnQgPSBuZXcgaW50W24gKyAxXTsKCiAgICAgICAgREZTKDEsIEcsIHVzZWQsIHBhcmVudCk7CgogICAgICAgIGxvbmcgYW5zd2VyID0gTG9uZy5NSU5fVkFMVUU7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgICAgIGFuc3dlciA9IE1hdGgubWF4KGFuc3dlciwgc3VtW2ldKTsKICAgICAgICB9CgogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbnN3ZXIpOwogICAgfQp9Cgo=