Cod sursa(job #1468366)

Utilizator blasterzMircea Dima blasterz Data 5 august 2015 21:11:33
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define N 16001

int n;
vector<int> a[N];

int S[N];
bool use[N];

void dfs(int u) {
    use[u] = true;
    for (vector<int>::iterator it = a[u].begin(); it != a[u].end(); ++it)
        if (!use[*it]) {
            dfs(*it);
            if (S[*it] > 0)
                S[u] += S[*it];
        }
}

int main() {
    freopen ("asmax.in", "r", stdin);
    freopen ("asmax.out", "w", stdout);
    scanf ("%d\n", &n);
    int i;
    for (i = 1; i <= n; ++i)
        scanf ("%d ", &S[i]);
    int p, q;
    for (i = 1; i < n; ++i) {
        scanf ("%d %d\n", &p, &q);
        a[p].push_back(q);
        a[q].push_back(p);
    }

    dfs(1);
    int sol = -0x3f3f3f3f;
    for (i = 1; i <= n; ++i)
        if (S[i] > sol)
            sol = S[i];
    printf ("%d\n", sol);
}