Pagini recente » Cod sursa (job #684866) | Cod sursa (job #896134) | Cod sursa (job #2886460) | Cod sursa (job #775548) | Cod sursa (job #1148955)
#include<cstdio>
int viz[16001],sum,smax,n,m,vf[32002],urm[32001],lst[16002],val[16001];
inline void adauga(int x,int y){
m++;
vf[m]=y;
urm[m]=lst[x];
lst[x]=m;
}
void dfs(int x){
int y,p;
viz[x]=1;
p=lst[x];
while(p!=0){
y=vf[p];
if(viz[y]==0){
dfs(y);
if(val[y]>0)
val[x]+=val[y];
}
p=urm[p];
}
//val[x] = sum;
if(val[x]>smax)
smax=val[x];
}
int main(){
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
int x,y,i;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&val[i]);
for(i=1;i<n;i++){
scanf("%d%d",&x,&y);
adauga(x,y);
adauga(y,x);
}
dfs(1);
printf("%d",smax);
return 0;
}