Pagini recente » Cod sursa (job #848331) | Cod sursa (job #799097) | Cod sursa (job #1358764) | Cod sursa (job #1003336) | Cod sursa (job #607048)
Cod sursa(job #607048)
# include <cstdio>
# include <vector>
using namespace std;
const char *FIN = "asmax.in", *FOU = "asmax.out";
const int MAX = 16005;
vector <int> G[MAX];
int N, sol = -0x3f3f3f3f, V[MAX];
inline void getmax (int &a, int b) {
a = a > b ? a : b;
}
int dfs (int node, int tmp) {
int sum = 0;
for (vector <int> :: iterator it = G[node].begin (); it != G[node].end (); ++it)
if (*it != tmp) {
int aux = dfs (*it, node);
if (aux > 0) sum += aux;
}
getmax (sol, sum += V[node]);
return sum;
}
int main (void) {
freopen (FIN, "r", stdin);
scanf ("%d", &N);
for (int i = 1; i <= N; ++i)
scanf ("%d", V + i);
for (int i = 1, x, y; i < N; ++i) {
scanf ("%d %d", &x, &y);
G[x].push_back (y);
G[y].push_back (x);
}
dfs (1, 0);
fprintf (fopen (FOU, "w"), "%d", sol);
}