Pagini recente » Cod sursa (job #1193663) | Cod sursa (job #1824393) | Cod sursa (job #2923076) | Cod sursa (job #1788959) | Cod sursa (job #1054237)
#include <stdio.h>
#define NR 16000
#define INF 999999999
FILE *in,*out;
typedef struct{
int vf,next;
}lista;
lista l[2*NR+1];
int v[NR+1],ultim[NR+1],rez[NR+1];
void dfs(int x){
rez[x]=v[x];
int nr,y;
nr=ultim[x];
while(nr>0){
y=l[nr].vf;
if(rez[y]==-INF){
dfs(y);
if(rez[y]>0){
rez[x]+=rez[y];
}
}
nr=l[nr].next;
}
return ;
}
int main()
{
in=fopen("asmax.in","r");
out=fopen("asmax.out","w");
int n,x,y,k=0,i;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++){
fscanf(in,"%d",&v[i]);
rez[i]=-INF;
}
for(i=1;i<n;i++){
fscanf(in,"%d%d",&x,&y);
k++;
l[k].vf=y;
l[k].next=ultim[x];
ultim[x]=k;
k++;
l[k].vf=x;
l[k].next=ultim[y];
ultim[y]=k;
}
dfs(1);
int max=-INF;
for(i=1;i<=n;i++){
if(max<rez[i]) max=rez[i];
}
fprintf(out,"%d",max);
return 0;
}