Cod sursa(job #777050)

Utilizator SchumiDumitru Andrei Georgian Schumi Data 10 august 2012 21:18:00
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cassert>
#include <cstdio>

#include <vector>

using namespace std;

#define pb push_back

const int N = 16005;

int n, maxim = -0x3f3f3f3f;
int viz[N], cost[N];
vector <int> vec[N];

void dfs(int nod)
{
    viz[nod] = 1;

    for (vector <int>::iterator it = vec[nod].begin(); it != vec[nod].end(); ++it)
        if (!viz[*it]) {
            dfs(*it);
            if (cost[*it] > 0)
                cost[nod] += cost[*it];
        }
}

int main()
{
    assert(freopen("asmax.in", "r", stdin));
    assert(freopen("asmax.out", "w", stdout));

    assert(scanf("%d", &n) == 1);
    for (int i = 1; i <= n; ++i)
        assert(scanf("%d", &cost[i]) == 1);
    for (int i = 1; i <= n - 1; ++i) {
        int x, y;
        assert(scanf("%d %d", &x, &y) == 2);
        vec[x].pb(y);
        vec[y].pb(x);
    }

    dfs(1);

    for (int i = 1; i <= n; ++i)
        if (cost[i] > maxim)
            maxim = cost[i];

    printf("%d\n", maxim);

    return 0;
}