Cod sursa(job #189580)

Utilizator katakunaCazacu Alexandru katakuna Data 15 mai 2008 19:54:54
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include<stdio.h>

int j,max,S,n,v[20000],x,y,i,nr[20000];
int *m[20000];
int viz[20000];



void df(int x){
int i;
viz[x]=1;


  for(i=1;i<=m[x][0];i++){
    if(!viz[m[x][i]])
    df(m[x][i]);
  }

S=0;


 for(j=1;j<=m[x][0];j++){
 S+=v[m[x][j]];
 }

 if(v[x]<S+v[x])
 v[x]=S+v[x];


}




int main(){



FILE *f=fopen("asmax.in","r");
fscanf(f,"%d ",&n);

  for(i=1;i<=n;i++)
  fscanf(f,"%d",&v[i]);

  for(i=1;i<=n-1;i++){
  fscanf(f,"%d %d",&x,&y);

   if(x<y)
   nr[x]++;

   else
   nr[y]++;

  }


  for(i=1;i<=n;i++){
   m[i] = new int [nr[i]+10];
  }


FILE *ff=fopen("asmax.in","r");
fscanf(ff,"%d ",&n);

  for(i=1;i<=n;i++)
  fscanf(ff,"%d",&v[i]);

  for(i=1;i<=n;i++)
  m[i][0]=0;

  for(i=1;i<=n-1;i++){
  fscanf(ff,"%d %d",&x,&y);

   if(x<y){
   m[x][0]++;
   m[x][m[x][0]]=y;
   }

   
   else{
   m[y][0]++;
   m[y][m[y][0]]=x;
   }

  }

fclose(ff);

df(1);

max=-100000;

for(i=1;i<=n;i++)

 if(v[i]>max)
 max=v[i];



FILE *g=fopen("asmax.out","w");
fprintf(g,"%d",max);
fclose(g);



return 0;
}