Pagini recente » Cod sursa (job #730664) | Cod sursa (job #424946) | Cod sursa (job #925845) | Cod sursa (job #1952340) | Cod sursa (job #837574)
Cod sursa(job #837574)
#include<stdio.h>
#include<vector>
using namespace std;
vector<int> v[16005];
int s[16005],a[16005];
bool viz[16005];
int max(int a,int b) {return a>b?a:b;}
void dfs(int u)
{
viz[u]=1;s[u]=a[u];
for(vector<int>::iterator it=v[u].begin();it!=v[u].end();it++)
if(!viz[*it])
{
dfs(*it);
if(s[*it]>0)
s[u]+=s[*it];
}
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int n,i,x,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
dfs(1);int ans=-1000000000;
for(i=1;i<=n;i++)
ans=max(ans,s[i]);
printf("%d\n",ans);
return 0;
}