#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5001;
vector <int> son[N];
int n;
int a[N],f[N],t[N][2],l,k;
void tryy(int root) {
t[root][0]=0;
t[root][1]=a[root];
for (int i=0; i<son[root].size(); i++) {
int y=son[root][i];
tryy(y);
t[root][0]+=max(t[y][0],t[y][1]);
t[root][1]+=t[y][0];
}
}
int main() {
scanf("%d",&n);
for (int i=1; i<=n; i++) {
scanf("%d",&a[i]);
f[i]=0;
}
while(scanf("%d%d",&l,&k)&&l!=0&&k!=0) {
f[l]=k;
son[k].push_back(l);
}
int root;
for (int i=1; i<=n; i++) {
if(f[i]==0) {
root=i;
break;
}
}
tryy(root);
printf("%d\n",max(t[root][0],t[root][1]));
return 0;
}