Cod sursa(job #355496)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 11 octombrie 2009 12:39:34
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
#include<string.h>
#define Nmx 16001

int n,s[Nmx],max,fol[Nmx];
struct nod
{
    int inf;
    nod *urm;
};
nod *G[Nmx];

void add(int x,int y)
{
    nod *aux;
    aux=new nod;
    aux->urm=G[x];
    aux->inf=y;
    G[x]=aux;
}

void citire()
{
    int x,y;
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
      scanf("%d",&s[i]);
    for(int i=1;i<n;++i)
      {
        scanf("%d%d",&x,&y);
        add(x,y);
        add(y,x);
      }
}

int solve(int x)
{
    int sum=s[x],v=0;
    for(nod *p=G[x];p!=NULL;p=p->urm)
      if(!fol[p->inf])
      {   fol[p->inf]=1;
          v=solve(p->inf);
          if(v+sum>sum)
            sum+=v;
          if(v>max) max=v;
          if(sum>max) max=sum;
      }
    return sum;
}

int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);
    citire();
    max=s[1];
    int sum=solve(1);
    printf("%d\n",max);
    return 0;
}