Pagini recente » Ciorna | Arhiva de probleme | Cod sursa (job #295969)
Cod sursa(job #295969)
#include <stdio.h>
#include <stdlib.h>
FILE *in=fopen("asmax.in","r"),*out=fopen("asmax.out","w");
#define INF 0x3f3f3f
int *g[16001],n,v[16001],best[16001],max=-INF;
void citire(){
int i,a,b;
fscanf(in,"%d",&n);
for(i=1;i<=n;i++){
fscanf(in,"%d",&v[i]);
g[i]=(int *)realloc(g[i],sizeof(int));
g[i][0]=0;
}
for(i=n-1;i>0;i--){
fscanf(in,"%d%d",&a,&b);
g[a][0]++;
g[a]=(int*)realloc(g[a],sizeof(int)*(g[a][0]+1));
g[a][g[a][0]]=b;
g[b][0]++;
g[b]=(int*)realloc(g[b],sizeof(int)*(g[b][0]+1));
g[b][g[b][0]]=a;
}
}
void df(int nod,int t){
best[nod]=v[nod];
for(int i=1;i<=g[nod][0];i++)
if(!best[i]&&i!=t){
df(i,nod);
if(best[i]>0) best[nod]+=best[i];
}
max=max>best[nod]?max:best[nod];
}
int main(){
citire();
df(1,0);
int i;
// for(i=1;i<=3;i++)fprintf(out," %d) ",g[1][i]);
fprintf(out,"%d",max);
fclose(in);
fclose(out);
return 0;
}