#include<bits/stdc++.h>
using namespace std;
vector <int> g[19000];
int n,a[19000],f[19000],book[19000];
void input()
{
cin >> n;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
}
for(int i = 1;i <= n - 1;i++)
{
int start,end;
cin >> start >> end;
g[start].push_back(end);
g[end].push_back(start);
}
}
int dfs(int x)
{
if(f[x] != 0)
{
return f[x];
}
f[x] = a[x];
book[x] = 1;
for(int i = 1;i <= g[x].size();i++)
{
int ux = g[x][i - 1];
if(book[ux] == 0)
{
f[x] = max(f[x], f[x] + dfs(ux));
}
}
return f[x];
book[x] = 0;
}
int ans = -2147483646;
void work()
{
for(int i = 1;i <= n;i++)
{
memset(f, 0, sizeof(f));
memset(book, 0, sizeof(f));
ans = max(ans, dfs(i));
}
cout << ans;
}
int main()
{
input();
work();
}