Cod sursa(job #189620)

Utilizator marinMari n marin Data 16 mai 2008 12:50:09
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<stdio.h>
#define DIM 20000

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



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

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

  if (w[x]==0) {
    w[x]=v[x];
    return;
  }

  if (w[x]+v[x]<v[x])
    w[x]=v[x];
  else
    w[x]+=v[x];



/* 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,"%ld ",&n);

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

  for(i=1;i<=n-1;i++){
  fscanf(f,"%ld %ld",&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,"%ld ",&n);

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

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

  for(i=1;i<=n-1;i++){
  fscanf(ff,"%ld %ld",&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=-100000000;

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

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



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


return 0;
}