Pagini recente » Cod sursa (job #2764221) | Cod sursa (job #1361381) | Cod sursa (job #848336) | Cod sursa (job #2555829) | Cod sursa (job #1913083)
#include <iostream>
#include <cstdio>
#include <vector>
#define MAXN 16050
using namespace std;
int n, a[MAXN], parent[MAXN], best = -999999;
vector<int> graf[MAXN];
void read()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n-1; i++) {
int x, y;
scanf("%d %d", &x, &y);
graf[x].push_back(y);
graf[y].push_back(x);
}
}
int solve(int nod)
{
int smx = a[nod];
for (int y : graf[nod])
{
if (parent[nod] == y) continue;
parent[y] = nod;
int s = solve(y);
smx += s;
}
best = max(best, smx);
return max(smx, 0);
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
read();
solve(1);
printf("%d", best);
return 0;
}