Cod sursa(job #1443681)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 28 mai 2015 14:12:48
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
//0111
#include <cstdio>
#include <list>
#define li list<int>::iterator
#define VM -16000000

using namespace std;
list<int> e[16010];
long v[16010], best[16010];
bool inst[16010];

void arb(int nod) {
    best[nod] = v[nod];
    inst[nod] = true;

    for (li it = e[nod].begin(); it != e[nod].end(); it++)
        if (!inst[*it]) {
            arb(*it);
            best[nod] += (best[*it] >= 0) ? best[*it] : 0;
        }
}

int main() {
    FILE* fi = fopen("asmax.in", "rt");
    FILE* fo = fopen("asmax.out", "wt");

    int n;
    fscanf(fi, "%d", &n);
    for (int i = 0; i < n; i++) {
        fscanf(fi, "%d", &v[i]);
        inst[i] = false;
    }

    for (int i = 1; i < n; i++) {
        int a, b;
        fscanf(fi, "%d%d", &a, &b);
        a--; b--;
        e[a].push_back(b);
        e[b].push_back(a);
    }

    long minim = VM;
    arb(0);
    for (int i = 0; i < n; i++) {
        if (best[i] > minim)
            minim = best[i];
    }

    fprintf(fo, "%ld", minim);

    return 0;
}