#include <bits/stdc++.h>
#define ____AnhKietSS____ ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define NamDinh signed
#define ii pair<int,int>
#define ll long long
#define foru(i,d,c) for(int i=(d);i<=(c);i++)
#define ford(i,d,c) for(int i=(d);i>=(c);i--)
#define fi first
#define se second
#define pb push_back
using namespace std;
const int N = 200005;
vector<int> a[N];
int p[N];
ll s[N];
ll w[N];
ll sum;
ll ans[N];
void dfs(int u,int par)
{
p[u] = par;
s[u] = w[u];
for(int v : a[u])
{
if(v == par) continue;
dfs(v,u);
s[u] += s[v];
}
}
void solve(int u)
{
ans[u] = sum;
for(int v : a[u])
{
if(p[v] == u)
ans[u] = max(ans[u],s[v]);
else
ans[u] = max(ans[u],sum-s[u]);
}
}
NamDinh main()
{
____AnhKietSS____
int n;
cin >> n;
foru(i,1,n)
{
int x;
cin >> x;
if(x == 1)
w[i] = 1;
else
w[i] = -1;
sum += w[i];
}
foru(i,1,n-1)
{
int u,v;
cin >> u >> v;
a[u].pb(v);
a[v].pb(u);
}
dfs(1,0);
foru(i,1,n)
solve(i);
foru(i,1,n)
cout << ans[i] << ' ';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIF9fX19BbmhLaWV0U1NfX19fIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKI2RlZmluZSBOYW1EaW5oIHNpZ25lZAojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBmb3J1KGksZCxjKSBmb3IoaW50IGk9KGQpO2k8PShjKTtpKyspCiNkZWZpbmUgZm9yZChpLGQsYykgZm9yKGludCBpPShkKTtpPj0oYyk7aS0tKQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAyMDAwMDU7Cgp2ZWN0b3I8aW50PiBhW05dOwppbnQgcFtOXTsKbGwgc1tOXTsKbGwgd1tOXTsKbGwgc3VtOwpsbCBhbnNbTl07Cgp2b2lkIGRmcyhpbnQgdSxpbnQgcGFyKQp7CiAgICBwW3VdID0gcGFyOwogICAgc1t1XSA9IHdbdV07CgogICAgZm9yKGludCB2IDogYVt1XSkKICAgIHsKICAgICAgICBpZih2ID09IHBhcikgY29udGludWU7CgogICAgICAgIGRmcyh2LHUpOwoKICAgICAgICBzW3VdICs9IHNbdl07CiAgICB9Cn0KCnZvaWQgc29sdmUoaW50IHUpCnsKICAgIGFuc1t1XSA9IHN1bTsKCiAgICBmb3IoaW50IHYgOiBhW3VdKQogICAgewogICAgICAgIGlmKHBbdl0gPT0gdSkKICAgICAgICAgICAgYW5zW3VdID0gbWF4KGFuc1t1XSxzW3ZdKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGFuc1t1XSA9IG1heChhbnNbdV0sc3VtLXNbdV0pOwogICAgfQp9CgpOYW1EaW5oIG1haW4oKQp7CiAgICBfX19fQW5oS2lldFNTX19fXwoKICAgIGludCBuOwogICAgY2luID4+IG47CgogICAgZm9ydShpLDEsbikKICAgIHsKICAgICAgICBpbnQgeDsKICAgICAgICBjaW4gPj4geDsKCiAgICAgICAgaWYoeCA9PSAxKQogICAgICAgICAgICB3W2ldID0gMTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHdbaV0gPSAtMTsKCiAgICAgICAgc3VtICs9IHdbaV07CiAgICB9CgogICAgZm9ydShpLDEsbi0xKQogICAgewogICAgICAgIGludCB1LHY7CiAgICAgICAgY2luID4+IHUgPj4gdjsKCiAgICAgICAgYVt1XS5wYih2KTsKICAgICAgICBhW3ZdLnBiKHUpOwogICAgfQoKICAgIGRmcygxLDApOwoKICAgIGZvcnUoaSwxLG4pCiAgICAgICAgc29sdmUoaSk7CgogICAgZm9ydShpLDEsbikKICAgICAgICBjb3V0IDw8IGFuc1tpXSA8PCAnICc7CgogICAgcmV0dXJuIDA7Cn0=