Cod sursa(job #33449)

Utilizator cromdioxidSasa Pastor cromdioxid Data 19 martie 2007 13:35:12
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 16001
int U[NMAX], *m[NMAX], g[NMAX], v[NMAX], s[NMAX], N, max;
void DF(int nod)
{
    int i;
    U[nod] = 1;
    s[nod] = v[nod];
    for (i = 0; i < g[nod]; i++)
        if (!U[m[nod][i]])
        {
            DF(m[nod][i]);
            if (s[m[nod][i]] > 0)
                s[nod] += s[m[nod][i]];
        }
    if (s[nod] > max)
        max = s[nod];
}

int main()
{
    int i, a, b;
    freopen("asmax.in", "rt", stdin);
    freopen("asmax.out", "wt", stdout);
    
    scanf("%d", &N);
    for (i = 1; i <= N; i++)
        scanf("%d", &v[i]);
    for (i = 1; i < N; i++)
    {
        scanf("%d %d", &a, &b);
        g[a]++;
        g[b]++;
    }

    fseek(stdin, 0, SEEK_SET);

    for (i = 1; i <= N; i++)
        m[i] = (int *) malloc(g[i] * sizeof(int));
    memset(g, 0, sizeof(g));

    scanf("%d", &N);
    for (i = 1; i <= N; i++)
        scanf("%d", &v[i]);
    for (i = 1; i < N; i++)
    {
        scanf("%d %d", &a, &b);
        m[a][g[a]++] = b;
        m[b][g[b]++] = a;
    }
    max = -10000;
    DF(1);
    
    printf("%d\n", max);
    return 0;
}