Pagini recente » Cod sursa (job #2557152) | Cod sursa (job #844404) | Cod sursa (job #2806578) | Cod sursa (job #1234887) | Cod sursa (job #1173333)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
vector <int> a[17000];
int b[1700],parc[17000],n,x,y;
long sol = -10000000;
long df(int x){
long sum = 0;
bool ok = true;
for(int i=0;i<a[x].size();i++)
if(parc[a[x][i]]!=1){
parc[a[x][i]]=1;
sum+= df(a[x][i]);
ok = false;
parc[a[x][i]]=0;
}
if(ok){
if(b[x]>0)return b[x];
else return 0;
}
if(b[x]+sum>0)return b[x]+sum;
else return 0;
}
int main(){
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
scanf("%d",&n);
int minim=-10000;
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
minim=max(minim,b[i]);
}
for(int i=1;i<=n-1;i++){
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
for(int i=1;i<=n;i++){
parc[i]=1;
sol = max(df(i),sol);
parc[i]=0;
}
if(sol==0)sol = minim;
printf("%d",sol);
}