#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
using namespace std;
// #define int long long
#define fi first
#define se second
#define siz(x) (int)(x.size())
#define all(x) x.begin(), x.end()
#define debug_arr(x,len) for(int _=1; _<=len; _++) cout<<x[_]<<" "; cout<<'\n';
#define debug(x) cout<<'\n'<<#x<<": "<<x<<'\n';
const int maxN = 5e3+5;
int n, a[maxN], dp[maxN][maxN], sz[maxN];
vector<int>adj[maxN];
void pre_dfs(int u, int v)
{
sz[u] = 1;
for(auto i: adj[u])
{
if(i == v) continue;
pre_dfs(i, u);
sz[u] += sz[i];
}
}
void dfs(int u, int v)
{
int tmp = 1;
for(auto i: adj[u])
{
if(i == v) continue;
dfs(i, u);
vector<int>ans(n+1, -1e9);
for(int j=1; j<=tmp; j+=1)
{
for(int k=1; k<=sz[i]; k+=1)
{
if(j + k > n) continue;
if(dp[u][j] == -1e9) continue;
if(dp[i][k] == -1e9) continue;
ans[j+k] = max({ans[j+k], dp[u][j+k], dp[u][j]+dp[i][k]});
}
}
for(int j=1; j<=n; j+=1) dp[u][j] = max(dp[u][j], ans[j]);
tmp += sz[i];
}
}
void solve()
{
}
int32_t main()
{
ios_base::sync_with_stdio(0); cin.tie(0);
cin>>n;
for(int i=1; i<=n; i+=1) cin>>a[i];
for(int i=1; i<n; i+=1)
{
int x,y; cin>>x>>y;
adj[x].push_back(y);
adj[y].push_back(x);
}
for(int i=1; i<=n; i+=1)
{
for(int j=1; j<=n; j+=1) dp[i][j] = -1e9;
dp[i][0] = 0;
dp[i][1] = a[i];
}
pre_dfs(1,0);
dfs(1, 0);
for(int i=1; i<=n; i+=1)
{
int res = -1e9;
for(int j=1; j<=n; j+=1) res = max(res, dp[j][i]);
cout<<res<<" ";
}
}
// dp[i][j] la ans max voi tplt co j node, o trong subtree i va co chua i;
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vICNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgc2l6KHgpIChpbnQpKHguc2l6ZSgpKQojZGVmaW5lIGFsbCh4KSB4LmJlZ2luKCksIHguZW5kKCkKI2RlZmluZSBkZWJ1Z19hcnIoeCxsZW4pIGZvcihpbnQgXz0xOyBfPD1sZW47IF8rKykgY291dDw8eFtfXTw8IiAiOyBjb3V0PDwnXG4nOwojZGVmaW5lIGRlYnVnKHgpIGNvdXQ8PCdcbic8PCN4PDwiOiAiPDx4PDwnXG4nOwpjb25zdCBpbnQgbWF4TiA9IDVlMys1OwoKaW50IG4sIGFbbWF4Tl0sIGRwW21heE5dW21heE5dLCBzelttYXhOXTsKdmVjdG9yPGludD5hZGpbbWF4Tl07Cgp2b2lkIHByZV9kZnMoaW50IHUsIGludCB2KQp7Cglzelt1XSA9IDE7Cglmb3IoYXV0byBpOiBhZGpbdV0pCgl7CgkJaWYoaSA9PSB2KSBjb250aW51ZTsKCQlwcmVfZGZzKGksIHUpOwoJCXN6W3VdICs9IHN6W2ldOwoJfQp9CnZvaWQgZGZzKGludCB1LCBpbnQgdikKewoJaW50IHRtcCA9IDE7Cglmb3IoYXV0byBpOiBhZGpbdV0pCgl7CgkJaWYoaSA9PSB2KSBjb250aW51ZTsKCQlkZnMoaSwgdSk7CgkJdmVjdG9yPGludD5hbnMobisxLCAtMWU5KTsKCQlmb3IoaW50IGo9MTsgajw9dG1wOyBqKz0xKQoJCXsKCQkJZm9yKGludCBrPTE7IGs8PXN6W2ldOyBrKz0xKQoJCQl7CgkJCQlpZihqICsgayA+IG4pIGNvbnRpbnVlOwoJCQkJaWYoZHBbdV1bal0gPT0gLTFlOSkgY29udGludWU7CgkJCQlpZihkcFtpXVtrXSA9PSAtMWU5KSBjb250aW51ZTsKCQkJCWFuc1tqK2tdID0gbWF4KHthbnNbaitrXSwgZHBbdV1baitrXSwgZHBbdV1bal0rZHBbaV1ba119KTsKCQkJfQoJCX0KCQlmb3IoaW50IGo9MTsgajw9bjsgais9MSkgZHBbdV1bal0gPSBtYXgoZHBbdV1bal0sIGFuc1tqXSk7CgkJdG1wICs9IHN6W2ldOwoJfQp9Cgp2b2lkIHNvbHZlKCkKewoJCn0KCmludDMyX3QgbWFpbigpCnsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7CgljaW4+Pm47Cglmb3IoaW50IGk9MTsgaTw9bjsgaSs9MSkgY2luPj5hW2ldOwoJZm9yKGludCBpPTE7IGk8bjsgaSs9MSkKCXsKCQlpbnQgeCx5OyBjaW4+Png+Pnk7CgkJYWRqW3hdLnB1c2hfYmFjayh5KTsKCQlhZGpbeV0ucHVzaF9iYWNrKHgpOwoJfQoJZm9yKGludCBpPTE7IGk8PW47IGkrPTEpCgl7CgkJZm9yKGludCBqPTE7IGo8PW47IGorPTEpIGRwW2ldW2pdID0gLTFlOTsKCQlkcFtpXVswXSA9IDA7CgkJZHBbaV1bMV0gPSBhW2ldOwoJfQoJcHJlX2RmcygxLDApOwoJZGZzKDEsIDApOwoJZm9yKGludCBpPTE7IGk8PW47IGkrPTEpCgl7CgkJaW50IHJlcyA9IC0xZTk7CgkJZm9yKGludCBqPTE7IGo8PW47IGorPTEpIHJlcyA9IG1heChyZXMsIGRwW2pdW2ldKTsKCQljb3V0PDxyZXM8PCIgIjsKCX0KfQoKLy8gZHBbaV1bal0gbGEgYW5zIG1heCB2b2kgdHBsdCBjbyBqIG5vZGUsIG8gdHJvbmcgc3VidHJlZSBpIHZhIGNvIGNodWEgaTs=