Cod sursa(job #189585)

Utilizator katakunaCazacu Alexandru katakuna Data 15 mai 2008 21:12:08
Problema Asmax Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 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]);   
  }   
  
  
  
 for(j=1;j<=m[x][0];j++){   
 S=v[m[x][j]];   
  
  
 if(S>0)   
 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=-10000000;   
  
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;   
}