#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <math.h>
#define mod 100000000
using namespace std;
struct node
{
int x,y,next;
}eg[1000010];
int n,w[6010],v[6010],head[6010],dp[6010][2],tt;
void init()
{
tt=0;
memset(head,-1,sizeof(head));
memset(v,0,sizeof(v));
memset(dp,0,sizeof(dp));
}
void add(int xx,int yy)
{
eg[tt].x=xx;
eg[tt].y=yy;
eg[tt].next=head[xx];
head[xx]=tt++;
eg[tt].x=yy;
eg[tt].y=xx;
eg[tt].next=head[yy];
head[yy]=tt++;
}
void dfs(int u)
{
v[u]=1;
dp[u][1]=w[u];
for(int i=head[u];i!=-1;i=eg[i].next)
{
int bi=eg[i].y;
if(v[bi]==0)
{
dfs(bi);
dp[u][0]+=max(dp[bi][0],dp[bi][1]);
dp[u][1]+=dp[bi][0];
}
}
}
int main()
{
int xx,yy;
while(scanf("%d",&n)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%d",&w[i]);
}
init();
while(scanf("%d%d",&xx,&yy)!=EOF)
{
if(xx==0&&yy==0) break;
add(xx,yy);
}
dfs(1);
printf("%d\n",max(dp[1][0],dp[1][1]));
}
return 0;
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
- 63.
- 64.
- 65.