Pagini recente » Cod sursa (job #1041757) | Cod sursa (job #2376037) | Cod sursa (job #101176) | Cod sursa (job #1581411) | Cod sursa (job #309921)
Cod sursa(job #309921)
#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;
}