Pagini recente » Cod sursa (job #1905307) | Cod sursa (job #2635060) | Cod sursa (job #1495760) | Cod sursa (job #2174462) | Cod sursa (job #2343924)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 16000;
int a[MAXN + 1], sol[MAXN + 1];
vector <int> gr[MAXN + 1];
void dfs (int nod, int tata) {
sol[nod] = a[nod];
for (auto fiu : gr[nod]) {
if (fiu != tata) {
dfs (fiu, nod);
sol[nod] += max (0, sol[fiu]);
}
}
}
int main() {
int n, i, x, y, mx;
freopen ("asmax.in", "r", stdin);
freopen ("asmax.out", "w", stdout);
scanf ("%d", &n);
for (i = 1; i <= n; i++)
scanf ("%d", &a[i]);
for (i = 1; i < n; i++) {
scanf ("%d%d", &x, &y);
gr[x].push_back (y);
gr[y].push_back (x);
}
dfs (1, -1);
mx = sol[1];
for (i = 2; i <= n; i++)
mx = max (mx, sol[i]);
printf ("%d\n", mx);
return 0;
}