#include <bits/stdc++.h>
using namespace std;
typedef long long int ll ;
ll sum[100];
int b[100];
void DFS(int node,vector <int> G[],int used[],int parent[]){
used[node] = 1 ;
for(auto u: G[node]){ //iterating all children "u" of "node"
if(used[u]==0){
//if this node/branch has never been visited before
//just go into it and search it using dfs in recursion
parent[u] = node ;
DFS(u,G,used,parent);
}
}
//print(node)--->parent
//----> bottom up traversal
ll s = 0 ;
for(auto child: G[node]){
if(child==parent[node]){
//it means the child node is parent of the node
//it is not the child
//ignore it
}
else{
s = max(s, sum[child]);
}
}
sum[node] = b[node] + s;
}
int main(){
int n ;
cin>>n ;
vector <int> G[n+1];
int i = 1 ;
while(i<=n){
cin>>b[i] ;
i++;
}
i = 1 ;
while(i<=n-1){
int u,v;
cin>>u>>v ;
G[u].push_back(v);
G[v].push_back(u);
i++;
}
int used[n+1] = {0};
int parent[n+1] = {0};
DFS(1,G,used,parent); //starts from node 1
ll answer = -100000000000000;
i = 1 ;
while(i<=n){
answer=max(answer,sum[i]);
i++;
}
cout<<(answer);
return 0 ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGludCBsbCA7IApsbCBzdW1bMTAwXTsKaW50IGJbMTAwXTsKdm9pZCBERlMoaW50IG5vZGUsdmVjdG9yIDxpbnQ+IEdbXSxpbnQgdXNlZFtdLGludCBwYXJlbnRbXSl7CiAgICAKICAgIHVzZWRbbm9kZV0gPSAxIDsgCiAgICAKICAgIGZvcihhdXRvIHU6IEdbbm9kZV0peyAvL2l0ZXJhdGluZyBhbGwgY2hpbGRyZW4gInUiIG9mICJub2RlIgogICAgICAgIAogICAgICAgIGlmKHVzZWRbdV09PTApewogICAgICAgICAgICAvL2lmIHRoaXMgbm9kZS9icmFuY2ggaGFzIG5ldmVyIGJlZW4gdmlzaXRlZCBiZWZvcmUgCiAgICAgICAgICAgIC8vanVzdCBnbyBpbnRvIGl0IGFuZCBzZWFyY2ggaXQgdXNpbmcgZGZzIGluIHJlY3Vyc2lvbgogICAgICAgICAgICBwYXJlbnRbdV0gPSBub2RlIDsgCiAgICAgICAgICAgIERGUyh1LEcsdXNlZCxwYXJlbnQpOwogICAgICAgICAgICAKICAgICAgICB9CiAgICB9CiAgICAKICAgIAogICAgLy9wcmludChub2RlKS0tLT5wYXJlbnQKICAgIC8vLS0tLT4gYm90dG9tIHVwIHRyYXZlcnNhbCAKICAgIGxsIHMgPSAwIDsgCiAgICBmb3IoYXV0byBjaGlsZDogR1tub2RlXSl7CiAgICAgICAgCiAgICAgICAgaWYoY2hpbGQ9PXBhcmVudFtub2RlXSl7CiAgICAgICAgICAgIC8vaXQgbWVhbnMgdGhlIGNoaWxkIG5vZGUgaXMgcGFyZW50IG9mIHRoZSBub2RlCiAgICAgICAgICAgIC8vaXQgaXMgbm90IHRoZSBjaGlsZAogICAgICAgICAgICAvL2lnbm9yZSBpdAogICAgICAgIH0KICAgICAgICAKICAgICAgICBlbHNlewogICAgICAgICAgICBzID0gbWF4KHMsIHN1bVtjaGlsZF0pOyAKICAgICAgICB9CiAgICB9CiAgICAKICAgIHN1bVtub2RlXSA9IGJbbm9kZV0gKyBzOyAKICAgIAogICAgCn0KCmludCBtYWluKCl7CiAgICBpbnQgbiA7IAogICAgY2luPj5uIDsgCiAgICB2ZWN0b3IgPGludD4gR1tuKzFdOwogICAgaW50IGkgPSAxIDsgCiAgICB3aGlsZShpPD1uKXsKICAgICAgICBjaW4+PmJbaV0gOyAKICAgICAgICBpKys7CiAgICB9CiAgICAKICAgIGkgPSAxIDsgCiAgICB3aGlsZShpPD1uLTEpewogICAgICAgIGludCB1LHY7CiAgICAgICAgY2luPj51Pj52IDsgCiAgICAgICAgR1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgR1t2XS5wdXNoX2JhY2sodSk7IAogICAgICAgIGkrKzsKICAgIH0KICAgIGludCB1c2VkW24rMV0gPSB7MH07CiAgICBpbnQgcGFyZW50W24rMV0gPSB7MH07CiAgICBERlMoMSxHLHVzZWQscGFyZW50KTsgLy9zdGFydHMgZnJvbSBub2RlIDEgIAogICAgCiAgICBsbCBhbnN3ZXIgPSAtMTAwMDAwMDAwMDAwMDAwOyAgICAKICAgIGkgPSAxIDsKICAgIHdoaWxlKGk8PW4pewogICAgICAgIGFuc3dlcj1tYXgoYW5zd2VyLHN1bVtpXSk7CiAgICAgICAgaSsrOwogICAgfQogICAgY291dDw8KGFuc3dlcik7IAogICAgcmV0dXJuIDAgOyAKfQoK