Pagini recente » Cod sursa (job #2553716) | Cod sursa (job #309472) | Cod sursa (job #2819027) | Cod sursa (job #850519) | Cod sursa (job #2205242)
#include <stdio.h>
#include <stdbool.h>
#define N 16000
int n,vf[2*N], urm[2*N], lst[N], nr, conex, s[N], max=-16000000;
bool viz[N];
void add(int x, int y){
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void dfs(int x){
viz[x]=true;
int p, y;
p=lst[x];
while(p!=0){
y=vf[p];
if(!viz[y]){
dfs(y);
if(s[y]>0)
s[x]+=s[y];
}
p=urm[p];
}
if(s[x]>max)
max=s[x];
}
int main()
{
FILE *f1, *f2;
int n, x, y, i;
f1=fopen("asmax.in","r");
fscanf(f1,"%d",&n);
for(i=1;i<=n;i++){
fscanf(f1,"%d",&s[i]);
}
for(i=0;i<n;i++){
fscanf(f1,"%d%d",&x,&y);
add(x,y);
add(y,x);
}
dfs(1);
f2=fopen("asmax.out","w");
fprintf(f2,"%d",max);
return 0;
}