#include <bits/stdc++.h>
#define int long long
#define maxn 16050
using namespace std;
vector<int> to[maxn];
int fa[maxn],w[maxn],dp[maxn][2];
void dfs(int u)
{
dp[u][0]=0,dp[u][1]=w[u];
for(int v : to[u])
{
if(v==fa[u]) continue;
fa[v]=u;
dfs(v);
dp[u][0] = max(dp[u][0] , max(dp[v][1] , dp[v][0]));
dp[u][1] = max(dp[u][1] , dp[v][1] + dp[u][1]);
}
}
signed main()
{
int n; cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
for(int i=1;i<=n-1;i++)
{
int u,v;
cin>>u>>v;
to[u].push_back(v);
to[v].push_back(u);
}
dfs(1);
cout<<max(dp[1][0],dp[1][1]);
return 0;
}