Cod sursa(job #961520)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 12 iunie 2013 15:38:01
Problema Asmax Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <cstdio>
using namespace std;

const int DMAX = 16003;
int VAL[DMAX], D[DMAX], A1[DMAX], A2[DMAX], *G[DMAX], st;

int sum (int nod) {

    int i, s = VAL[nod];
    D[nod] = 1;
    for (i = 1; i <= G[nod][0]; ++i)
        if (!D[G[nod][i]])
            s += sum (G[nod][i]);
    if (s > 0)
        return s;
    else
        if (s == 0)
            return VAL[nod];

}

int main () {

    freopen ("asmax.in", "r", stdin);
    freopen ("asmax.out", "w", stdout);
    int N, M = 0, i, nod;
    scanf ("%d", &N);
    for (i = 1; i <= N; ++i)
        scanf ("%d", &VAL[i]);
    for (i = 1; i < N; ++i)
        scanf ("%d%d", &A1[i], &A2[i]), ++D[A1[i]], ++D[A2[i]];
    for (i = 1; i <= N; D[++i] = 0)
        G[i] = new int [D[i] + 1], G[i][0] = 0;
    D[1] = 0;
    for (i = 1; i < N; ++i)
        G[A1[i]][++G[A1[i]][0]] = A2[i],
        G[A2[i]][++G[A2[i]][0]] = A1[i];
    for (i = 1; i <= N; ++i)
        if (VAL[i] > M)
            M = VAL[i], nod = i;
    printf ("%d", sum (nod));
}