Pagini recente » Monitorul de evaluare | Cod sursa (job #1023612) | Cod sursa (job #2813037) | Cod sursa (job #1205971) | Cod sursa (job #777050)
Cod sursa(job #777050)
#include <cassert>
#include <cstdio>
#include <vector>
using namespace std;
#define pb push_back
const int N = 16005;
int n, maxim = -0x3f3f3f3f;
int viz[N], cost[N];
vector <int> vec[N];
void dfs(int nod)
{
viz[nod] = 1;
for (vector <int>::iterator it = vec[nod].begin(); it != vec[nod].end(); ++it)
if (!viz[*it]) {
dfs(*it);
if (cost[*it] > 0)
cost[nod] += cost[*it];
}
}
int main()
{
assert(freopen("asmax.in", "r", stdin));
assert(freopen("asmax.out", "w", stdout));
assert(scanf("%d", &n) == 1);
for (int i = 1; i <= n; ++i)
assert(scanf("%d", &cost[i]) == 1);
for (int i = 1; i <= n - 1; ++i) {
int x, y;
assert(scanf("%d %d", &x, &y) == 2);
vec[x].pb(y);
vec[y].pb(x);
}
dfs(1);
for (int i = 1; i <= n; ++i)
if (cost[i] > maxim)
maxim = cost[i];
printf("%d\n", maxim);
return 0;
}