#include<bits/stdc++.h>
using namespace std;
int fa[6010];
vector<int> son[6010];
int r[6010];
int dp[6010][2];
int n;
int x,y;
void dfs(int x){
dp[x][1]=r[x];
dp[x][0]=0;//取或不取
for(int i=0;i<son[x].size();i++)
{
int s=son[x][i];
dfs(s);
dp[x][0]+=max(dp[s][0],dp[s][1]);//找取或不取中的最大值
dp[x][1]+=dp[s][0];//已取上级,只能不取
}
dp[x][1]+=r[x];
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>r[i];
while(scanf("%d%d",&x,&y)==2,x!=0||y!=0)
son[y].push_back(x);
fa[x]=y;
}
for(int i=1;i<=n;i++)
{
if(fa[i]==0){
dfs(i);
cout<<max(dp[i][0],dp[i][1]);
break;
}
}
}