Pagini recente » Cod sursa (job #1236726) | Cod sursa (job #1362348) | Cod sursa (job #2927487) | Cod sursa (job #1987572) | Cod sursa (job #1700374)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 16000
#define INF 1000000000
int v[1+MAXN], start[1+MAXN], next[1+MAXN], d[1+MAXN], fth[1+MAXN];
int D(int nod){
if(d[nod]==-INF){
d[nod]=v[nod];
int i=start[nod];
while(i!=0){
if(D(i)>0)
d[nod]+=D(i);
i=next[i];
}
}
return d[nod];
}
int main(){
int n;
FILE*fi,*fo;
fi=fopen("asmax.in","r");
fo=fopen("asmax.out","w");
fscanf(fi,"%d", &n);
for(int i=1;i<=n;i++){
fscanf(fi,"%d", &v[i]);
d[i]=-INF;
}
for(int i=1;i<n;i++){
int a, b;
fscanf(fi,"%d%d", &a, &b);
if(fth[b]==0){
next[b]=start[a];
start[a]=b;
fth[b]=a;
}
else{
next[a]=start[b];
start[b]=a;
fth[a]=b;
}
}
int maxim=-INF;
for(int i=1;i<=n;i++){
if(D(i)>maxim)
maxim=D(i);
//printf("%d %d\n", i, D(i));
}
fprintf(fo,"%d", maxim);
fclose(fi);
fclose(fo);
return 0;
}