#include<bits/stdc++.h>
using namespace std;
int n;
int x,y;
int a[6005];
int dp[6005][2];
int fa[6005];
vector<int> m[6005];
int find(int x){
if(fa[x] == x)return x;
return find(fa[x]);
}
void dfs(int u){
if(m[u].size() == 0){
dp[u][1] = a[u];
dp[u][0] = 0;
return ;
}
dp[u][1] = 1;
for(int i = 0; i < m[u].size(); i ++ ){
dfs(m[u][i]);
dp[u][0] += max(dp[m[u][i]][1],dp[m[u][i]][0]);
dp[u][1] += dp[m[u][i]][0];
}
}
int main(){
cin>>n;
for(int i = 1; i <= n; i ++ ){
cin>>a[i];
fa[i] = i;
}
for(int i = 1; i < n; i ++ ){
cin>>x>>y;
fa[x] = y;
m[y].push_back(x);
}
int fin = find(1);
dfs(fin);
cout<<max(0,max(dp[fin][0],dp[fin][1]));
}