#include<bits/stdc++.h>
using namespace std;

const int N=2e5+10;

int n;
int f[N],g[N];
vector<int> G[N];


void dfs(int u){
	for(int v:G[u]){
		dfs(v);
		f[u]=f[u]+g[v];
		g[u]=g[u]+max(f[v],g[v]);
	}
	return;
}

void solve(){
	vector<bool> f_root(n+1,false);
	int x,y;
	for(int i=1;i<=n-1;i++){
		cin>>x>>y;
		G[x].push_back(y);
		f_root[y]=true;
	}
	int root;
	for(int i=1;i<=n;i++){
		if(!f_root[i]){
			root=i;
			break;
		}
	}
	dfs(root);
	cout<<max(f[root],g[root])<<endl;
	return;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>f[i];
	}
	solve();
	
    return 0;
}