Cod sursa(job #1468277)

Utilizator theep0Cruceru Radu theep0 Data 5 august 2015 17:09:23
Problema Asmax Scor 80
Compilator c Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

#define NN 16001

int n, i, v, s, e;

typedef struct chld {
    int e;
    struct chld *n;
} chld;

chld *chlds[NN];
int viz[NN];
int S[NN];

unsigned int gsum = INT_MIN;

inline int max(int a, int b) {
    return a > b ? a : b;
}

unsigned long long solve(int i) {
    int ms = 0;

    chld *c = chlds[i];
    while (c) {
        if (viz[c->e] == 0) {
            viz[c->e] = 1;
            ms += max(solve(c->e), 0);
        }
        c = c->n;
    }
    
    gsum = max(ms + S[i], gsum);
    return max(ms + S[i], 0);
}

int main() {
    chld *ch;
    FILE *fi, *fo;
    fi = freopen("asmax.in", "r", stdin);
    fo = freopen("asmax.out", "w", stdout);
    scanf("%d", &n);
    for(i=1;i<=n;i++) scanf("%d", S + i);
    for(i = 1; i < n; i++) {
        scanf("%d %d", &s, &e);
        ch = (chld*) malloc(sizeof(chld));
        ch->e = e;
        ch->n = chlds[s];
        chlds[s] = ch;

        ch = (chld*) malloc(sizeof(chld));
        ch->e = s;
        ch->n = chlds[e];
        chlds[e] = ch;
    }
    solve(1);
    printf("%d\n", gsum);
    fclose(fi);
    fclose(fo);
    return 0;
}