Pagini recente » Cod sursa (job #2489774) | Cod sursa (job #1745067) | Cod sursa (job #3179958) | Cod sursa (job #966455) | Cod sursa (job #1303111)
#define IA_PROB "asmax"
#include <cstdio>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
using namespace std;
int m;
int dfs(vector< vector<int> > &tree, int *v, int cur, int prev) {
int ret = v[cur];
int sumpoz = 0;
for (vector<int>::iterator child = tree[cur].begin();
child != tree[cur].end(); child++) {
if (*child != prev) {
int c = dfs(tree, v, *child, cur);
if (c > 0) {
sumpoz += c;
}
}
}
ret += sumpoz;
m = max(m, ret);
return ret;
}
int main()
{
freopen(IA_PROB".in", "r", stdin);
freopen(IA_PROB".out", "w", stdout);
int n;
scanf("%d", &n);
int v[n];
vector< vector<int> > tree(n);
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]);
}
for (int i = 0; i < n - 1; i++) {
int x, y;
scanf("%d %d", &x, &y);
x--; y--;
tree[x].push_back(y);
tree[y].push_back(x);
}
m = v[0];
dfs(tree, v, 0, -1);
printf("%d", m);
return 0;
}