Cod sursa(job #356543)

Utilizator Dr.OptixCristian Dinu Dr.Optix Data 15 octombrie 2009 00:57:20
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>
#include <limits.h>

int n;
int viz[16001]={0};
int val[16001];
int max;

struct nod
{
    int val;
    nod* urm;
};

nod *vf[16001]={0}, *sf[16001]={0};
nod *aux;

void AddInList(int ListNo, int Val)
{
    if (vf[ListNo]==NULL)
    {
        vf[ListNo] = new nod;
        vf[ListNo]->val = Val;
        vf[ListNo]->urm = NULL;
        sf[ListNo] = vf[ListNo];
    }
    else
    {
        nod *aux = new nod;
        aux->val = Val;
        aux->urm = NULL;
        sf[ListNo]->urm = aux;
        sf[ListNo]=aux;
    }
}

int Rez(int Nod)
{
    int s=val[Nod], saux=0;

    for(nod *aux=vf[Nod]; aux!=NULL; aux=aux->urm)
      if(!viz[aux->val])
      {   viz[aux->val]=1;
          saux=Rez(aux->val);
          if(saux>0)
            s+=saux;
          if(saux>max) max=saux;
          if(s>max) max=s;
      }
    return s;
}


int main()
{
    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);

    scanf("%d", &n);
    for (int i=0; i<n;i++)
        scanf("%d",&val[i]);

    int a,b;
    for (int i=0;i<n-1;i++)
    {
        scanf("%d%d",&a,&b);
        AddInList(a-1,b-1);
        AddInList(b-1,a-1);
    }

    max=val[0];
    viz[0]=1;
    Rez(0);

    printf("%d",max);

    return 0;
}