Pagini recente » Cod sursa (job #1173526) | Cod sursa (job #1075891) | Cod sursa (job #2816525) | Cod sursa (job #2430724) | Cod sursa (job #961529)
Cod sursa(job #961529)
#include <cstdio>
using namespace std;
const int DMAX = 16003;
int VAL[DMAX], D[DMAX], A1[DMAX], A2[DMAX], *G[DMAX], st;
int sum (int nod) {
int i, s = VAL[nod];
D[nod] = 1;
for (i = 1; i <= G[nod][0]; ++i)
if (!D[G[nod][i]])
s += sum (G[nod][i]);
if (s > 0)
return s;
}
int main () {
freopen ("asmax.in", "r", stdin);
freopen ("asmax.out", "w", stdout);
int N, M = -2e9, i, nod;
scanf ("%d", &N);
for (i = 1; i <= N; ++i)
scanf ("%d", &VAL[i]);
for (i = 1; i < N; ++i)
scanf ("%d%d", &A1[i], &A2[i]), ++D[A1[i]], ++D[A2[i]];
for (i = 1; i <= N; D[++i] = 0)
G[i] = new int [D[i] + 1], G[i][0] = 0;
D[1] = 0;
for (i = 1; i < N; ++i)
G[A1[i]][++G[A1[i]][0]] = A2[i],
G[A2[i]][++G[A2[i]][0]] = A1[i];
for (i = 1; i <= N; ++i)
if (VAL[i] > M)
M = VAL[i], nod = i;
printf ("%d", sum (nod));
}