Cod sursa(job #153759)

Utilizator ninjaNo name ninja Data 10 martie 2008 18:37:57
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <fstream>
using namespace std;

#define in "asmax.in"
#define out "asmax.out"
#define dim 16001

inline int Maxim(int a, int b) {
       if ( a > b ) return a;
       return b;
}

int N;
int maxim = -1001;
int Val[dim], S[dim];
bool Sel[dim];

typedef struct NOD {
     int vf;
     NOD* next;
} *PNOD;

PNOD L[dim];

void Add(int,int);
void Solve(int);

int main()
{
    int x, y;
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d", &N);
    for ( int i = 1; i <= N; i++ )
        scanf("%d", &Val[i]);
        
    for ( int i = 1; i < N; i++ )
        scanf("%d%d", &x, &y), Add(x,y), Add(y,x);
    
    Solve(1);
    
    printf("%d\n", maxim);
}

void Add(int i, int j)
{
     PNOD q = new NOD;
     q->vf = j;
     q->next = L[i];
     L[i] = q;
}

void Solve(int nod)
{
     Sel[nod] = 1;
     S[nod] = Val[nod];
     
     for ( PNOD q = L[nod]; q; q=q->next )
     {
         if ( !Sel[q->vf] )
         {
              Solve(q->vf);
              S[nod] = Maxim( S[nod], S[nod] + S[q->vf] );
              if ( maxim < S[nod] ) maxim = S[nod];
         }
     }
}