Pagini recente » Cod sursa (job #448473) | Cod sursa (job #2638290) | Cod sursa (job #169452) | Cod sursa (job #54815) | Cod sursa (job #512)
Cod sursa(job #512)
#include<stdio.h>
#include<vector>
using namespace std;
const int maxn = 34001;
vector <int> a[maxn];
int i;
int n;
int c[maxn];
long long cf[maxn];
int ver[maxn];
int x,y;
void dfs(int i)
{
ver[i]=1;
vector<int>::iterator it;
for(it=a[i].begin();it!=a[i].end();it++)
if (ver[*it]==0) dfs(*it);
for(it=a[i].begin();it!=a[i].end();it++)
if (cf[*it]>0)cf[i]+=cf[*it];
cf[i]+=c[i];
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&c[i]);
}
for(i=1;i<=n-1;i++)
{
scanf("%d %d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
dfs(1);
long long max=-100000000;
for(i=1;i<=n;i++)
if (max<cf[i]) max=cf[i];
printf("%lld\n",max);
return 0;
}