Cod sursa(job #1774259)

Utilizator DevilOnFieldTudor Horia Niculescu DevilOnField Data 8 octombrie 2016 19:01:52
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<stdio.h>
#include<vector>

#define MINIMPOS -2000000000

using namespace std;

vector<int> graf[16001];
int val[16001], maxim, viz[16001];
FILE *in, *out;

int sum(int nod)
{
    int toto = val[nod], x;
    viz[nod] = 1;
    for(int i = 0; i < graf[nod].size(); i++) {
        if(viz[graf[nod][i]] == 0) {
            x = sum(graf[nod][i]);
            toto = toto + x;
        }
    }
    if(toto < 0) {
        toto = 0;
    } else {
        if(toto > maxim) {
            maxim = toto;
        }
    }
    viz[nod] = 0;

    return toto;
}

int main ()
{

    in = fopen("asmax.in", "r");
    out = fopen("asmax.out", "w");

    int n;
    fscanf(in, "%d", &n);
    maxim = MINIMPOS;

    for(int i = 1; i <= n; i++) {
        fscanf(in, "%d", &val[i]);
        if(val[i] > maxim) {
            maxim = val[i];
        }
    }
    int a, b;
    for(int i = 1; i < n; i++) {
        fscanf(in, "%d%d", &a, &b);
        graf[a].push_back(b);
        graf[b].push_back(a);
    }

    sum(1);

    fprintf(out, "%d", maxim);

    fclose(in);
    fclose(out);
    return 0;
}