Cod sursa(job #577897)

Utilizator nandoLicker Nandor nando Data 10 aprilie 2011 18:59:38
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;

fstream fin ("asmax.in", ios::in);
fstream fout ("asmax.out", ios::out);

#define max(a, b) (((a) > (b)) ? (a) : (b))
#define MAXN 16010
#define MIN -1e9

vector <int> G[MAXN];
bitset <MAXN> viz;
typedef vector <int>::iterator iter;
int n, best[MAXN], bst = MIN;

void dfs (int n)
{
    viz[n] = true;
    for (iter it = G[n].begin (); it != G[n].end (); ++it) {
        if (!viz[*it]) {
            dfs (*it);
            if (best[*it] > 0) {
                best[n] += best[*it];
            }
        }
    }
    bst = max(bst, best[n]);
}

int main ()
{
    fin >> n;

    for (int i = 1; i <= n; ++i) {
        fin >> best[i];
    }

    for (int i = 2, a, b; i <= n; ++i) {
        fin >> a >> b;
        G[a].push_back (b);
        G[b].push_back (a);
    }

    dfs (1);

    fout << bst << endl;

    fin.close ();
    fout.close ();
    return 0;
}