Cod sursa(job #51049)

Utilizator wazupPricop Mircea wazup Data 9 aprilie 2007 20:01:23
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <stdio.h>
struct el { int val;
            el *urm;
          };
el *ad[16001],*p;
int n,i,x,y;
char viz[16001];
long a[16001],max=-2100000000;

void sume (int k)
   {  int i;
      el *q=ad[k];
      viz[k]=1;
      while (q->urm!=0)
        {  i=q->val;
           if (viz[i]==0)
              { sume(i);
                if (a[i]>0)
                  a[k]+=a[i];
              }
           q=q->urm;
        }
      i=q->val;
      if (viz[i]==0)
         { sume(i);
           if (a[i]>0)
              a[k]+=a[i];
         }
    }

int main()
{
FILE *fin,*fout;
fin=fopen("asmax.in","rt");
fout=fopen("asmax.out","wt");
fscanf(fin,"%d ",&n);
for (i=1;i<=n;i++)
  fscanf(fin,"%ld ",&a[i]);
for (i=1;i<=n-1;i++)
  { fscanf(fin,"%d %d",&x,&y);
    p=new el;
    p->val=y;
    p->urm=ad[x];
    ad[x]=p;
    p=new el;
    p->val=x;
    p->urm=ad[y];
    ad[y]=p;
  }
sume(1);
for (i=1;i<=n;i++)
    if (a[i]>max)
       max=a[i];
fprintf(fout,"%ld\n",max);
return 0;
}