Cod sursa(job #1468358)

Utilizator blasterzMircea Dima blasterz Data 5 august 2015 21:06:00
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
#define NN 16001
 
int n, i, v, s, e;
 
struct chld {
    int e;
    chld *n;
};
 
chld *chlds[NN];
int viz[NN];
int S[NN];
 
int gsum = -0x3f3f3f3f;
 
inline int max(int a, int b) {
    return a > b ? a : b;
}
 
int solve(int i) {
    int ms = S[i];
 
    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, gsum);
    return ms;
}
 
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 = new chld;//(chld*) malloc(sizeof(chld));
        ch->e = e;
        ch->n = chlds[s];
        chlds[s] = ch;
 
        ch = new chld;//(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;
}