#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--){
int n;
cin >> n;
vector<ll>a(n+1);
for(int i = 1; i <= n; i++)
cin >> a[i];
// build adjacency
vector<vector<int>> adj(n+1);
for(int i = 0; i < n-1; i++){
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
vector<ll> f(n+1), h(n+1);
vector<int> parent(n+1, 0);
queue<int> q;
// initialize root = 1
parent[1] = -1;
f[1] = a[1];
h[1] = -a[1];
q.push(1);
// BFS from root
while(!q.empty()){
int i = q.front();
q.pop();
for(int j : adj[i]){
if (parent[j] == 0){
parent[j] = i;
// compute DP for child j
f[j] = max(a[j], a[j] + h[i]);
h[j] = max(-a[j], -a[j] + f[i]);
q.push(j);
}
}
}
// output threats = f[i]
for(int i = 1; i <= n; i++){
cout << f[i] << (i==n?'\n':' ');
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwoKaW50IG1haW4oKXsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pewogICAgICAgIGludCBuOwogICAgICAgIGNpbiA+PiBuOwoKICAgICAgICB2ZWN0b3I8bGw+YShuKzEpOwogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgICAgICBjaW4gPj4gYVtpXTsKCiAgICAgICAgLy8gYnVpbGQgYWRqYWNlbmN5CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobisxKTsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbi0xOyBpKyspewogICAgICAgICAgICBpbnQgdSwgdjsKICAgICAgICAgICAgY2luID4+IHUgPj4gdjsKICAgICAgICAgICAgYWRqW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICAgICAgYWRqW3ZdLnB1c2hfYmFjayh1KTsKICAgICAgICB9CgogICAgICAgIHZlY3RvcjxsbD4gZihuKzEpLCBoKG4rMSk7CiAgICAgICAgdmVjdG9yPGludD4gcGFyZW50KG4rMSwgMCk7CiAgICAgICAgcXVldWU8aW50PiBxOwoKICAgICAgICAvLyBpbml0aWFsaXplIHJvb3QgPSAxCiAgICAgICAgcGFyZW50WzFdID0gLTE7CiAgICAgICAgZlsxXSA9IGFbMV07CiAgICAgICAgaFsxXSA9IC1hWzFdOwogICAgICAgIHEucHVzaCgxKTsKCiAgICAgICAgLy8gQkZTIGZyb20gcm9vdAogICAgICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgICAgICBpbnQgaSA9IHEuZnJvbnQoKTsgCiAgICAgICAgICAgIHEucG9wKCk7CiAgICAgICAgICAgIGZvcihpbnQgaiA6IGFkaltpXSl7CiAgICAgICAgICAgICAgICBpZiAocGFyZW50W2pdID09IDApewogICAgICAgICAgICAgICAgICAgIHBhcmVudFtqXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgLy8gY29tcHV0ZSBEUCBmb3IgY2hpbGQgagogICAgICAgICAgICAgICAgICAgIGZbal0gPSBtYXgoYVtqXSwgYVtqXSArIGhbaV0pOwogICAgICAgICAgICAgICAgICAgIGhbal0gPSBtYXgoLWFbal0sIC1hW2pdICsgZltpXSk7CiAgICAgICAgICAgICAgICAgICAgcS5wdXNoKGopOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBvdXRwdXQgdGhyZWF0cyA9IGZbaV0KICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKyl7CiAgICAgICAgICAgIGNvdXQgPDwgZltpXSA8PCAoaT09bj8nXG4nOicgJyk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAwOwp9Cg==