Cod sursa(job #65351)

Utilizator DastasIonescu Vlad Dastas Data 8 iunie 2007 19:27:30
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#define maxn 16001

FILE *in = fopen("asmax.in","r"), *out = fopen("asmax.out","w");

int n;
int vals[maxn];
int viz[maxn];

struct graf
{
    int nod;
    graf *next;
};

graf *a[maxn] = {NULL};

void add(graf *&p, int v)
{
    graf *q = new graf;
    q->nod = v;
    q->next = p;
    p = q;
}

void read()
{
    fscanf(in, "%d", &n);

    for ( int i = 1; i <= n; ++i )
        fscanf(in, "%d", &vals[i]);

    int x, y;
    for ( int i = 1; i < n; ++i )
    {
        fscanf(in, "%d %d", &x, &y);
        add(a[x], y);
        add(a[y], x);
    }
}

void DF(int nod)
{
    while ( a[nod] )
    {
        viz[nod] = 1;

        if ( !viz[a[nod]->nod] )
        {
            DF(a[nod]->nod);
            if ( vals[a[nod]->nod] > 0 )
                vals[nod] += vals[a[nod]->nod];
        }
        a[nod] = a[nod]->next;
    }
}

int main()
{
    read();

    DF(1);

    int max = -1000000000;
    for ( int i = 1; i <= n; ++i )
        if ( vals[i] > max )
            max = vals[i];

    fprintf(out, "%d\n", max);


	return 0;
}