Pagini recente » Cod sursa (job #1107744) | Cod sursa (job #2088927) | Cod sursa (job #1025210) | Cod sursa (job #2029720) | Cod sursa (job #1800775)
#include <stdio.h>
#define MAXN 16000
int cp[MAXN+1], ult[MAXN+1], ad[2*MAXN+1], next[2*MAXN+1], poz=0, val[MAXN+1];
bool viz[MAXN+1];
void adauga(int a, int b){
ad[++poz]=b;
next[poz]=ult[a];
ult[a]=poz;
}
void dfs(int nod){
viz[nod]=true;
val[nod]=cp[nod];
int i=ult[nod];
while(i!=0){
if(!viz[ad[i]]){
dfs(ad[i]);
if(val[ad[i]]>0)
val[nod]+=val[ad[i]];
}
i=next[i];
}
}
int main()
{
int n, i, max, x, y;
FILE *fi=fopen("asmax.in", "r"), *fo=fopen("asmax.out", "w");
fscanf(fi, "%d", &n);
for(i=1;i<=n;i++)
fscanf(fi, "%d", &cp[i]);
for(i=1;i<n;i++){
fscanf(fi, "%d%d", &x, &y);
adauga(x,y);
adauga(y,x);
}
dfs(1);
max=-2000000000;
for(i=1;i<=n;i++)
if(max<val[i])
max=val[i];
fprintf(fo, "%d", max);
fclose(fo);
fclose(fi);
return 0;
}