Pagini recente » Cod sursa (job #1280230) | Cod sursa (job #2468553) | Cod sursa (job #2178908) | Cod sursa (job #2435426) | Cod sursa (job #1218427)
#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);
}