Cod sursa(job #309921)

Utilizator sandyxpSanduleac Dan sandyxp Data 1 mai 2009 14:00:54
Problema Cc Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <fstream>
using namespace std;

#define NUME "cc"
ifstream fi(NUME".in");
ofstream fo(NUME".out");
#define MAXN 100001

int N, Profit[MAXN], U[MAXN];
struct item { int nod; item *r; } *L[MAXN];

/* Max: Daca il iau sau nu pe nodul curent, si daca sigur nu */
pair<int, int> df(int s)
{
    int x = Profit[s], y = 0;
    U[s] = 1;
    for (item *p = L[s]; p; p = p->r) {
        if (U[p->nod]) continue;
        const pair<int, int> &ret = df(p->nod);
        x += ret.second; y += ret.first;
    }
    return make_pair(max(x,y), y);
}

void add(int x, int y)
{
    item *tmp = new item;
    *tmp = (item) { y, L[x] };
    L[x] = tmp;
}

int main()
{
    int x, y, i;
    fi >> N;
    for (i = 1; i <= N; ++i)
        fi >> Profit[i];
    for (i = 1; i < N; ++i) {
        fi >> x >> y;
        add(x, y);
        add(y, x);
    }
    fo << df(1).first << endl;
    return 0;
}