Cod sursa(job #129201)

Utilizator DITzoneCAdrian Diaconu DITzoneC Data 28 ianuarie 2008 19:16:12
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#include <string.h>
#define nmax 16011
#define inf 16000000

int a[nmax],max[nmax],v[nmax],urm[2*nmax],nr[2*nmax],z,n,sol=0;

void Vadd(int i,int j)
{
  nr[++z]=j;
  urm[z]=v[i];
  v[i]=z;
}

void parc(int i,int p)
{
  int aux;  
  for(max[i]=a[i],aux=v[i];aux;aux=urm[aux])
    if(nr[aux]!=p)
    {
      parc(nr[aux],i);
      if(max[nr[aux]]>0)
	max[i]+=max[nr[aux]];
    }
  if(max[i]>sol)
    sol=max[i];
}

int main()
{
  FILE *fi=fopen("asmax.in","r"),*fo=fopen("asmax.out","w");
  fscanf(fi,"%d",&n);
  memset(v,0,sizeof(v));
  int ii,j,i;
  for(i=1;i<=n;i++)
    fscanf(fi,"%d",&a[i]);
  for(sol=a[1],ii=1;ii<n;ii++)
  {
    fscanf(fi,"%d %d",&i,&j);
    Vadd(i,j);
    Vadd(j,i);
  }
  fclose(fi);
  parc(1,0);
  fprintf(fo,"%d\n",sol);
  fclose(fo);
  return(0);
}