#include<bits/stdc++.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
vector<int> son[6010];
bool vis[6010]={};
int h[6010];
int llx[6010][1]; //1´æÔÚ 0²»´æÔÚ
void dp(int k)
{
// cout<<son[k].size()<<endl;
llx[k][1]=h[k];
llx[k][0]=0;
for(int i=0;i<son[k].size();i++)
{
int u=son[k][i];
dp(u);
llx[k][0]+=max(llx[u][1],llx[u][0]);
llx[k][1]+=llx[u][0];
}
cout<<llx[k][1]<<" "<<llx[k][2]<<endl;
}
int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>h[i];
int x,y;
for(int i=1;i<=n-1;i++)
{
cin>>x>>y;
son[y].push_back(x);
vis[x]=1;
}
int root;
for(int i=1;i<=n;i++)
if(!vis[i])
{
root=i;
break;
}
dp(root);
cout<<max(llx[root][1],llx[root][0]);
return 0;
}