Pagini recente » Cod sursa (job #2406774) | Cod sursa (job #358175) | Cod sursa (job #3211258) | Cod sursa (job #382942) | Cod sursa (job #1539707)
#include <cstdio>
#include <iostream>
#include <set>
#include <climits>
#include <map>
#include <algorithm>
#include <list>
#include <vector>
#include <utility>
#include <cstdlib>
using namespace std;
int v[16005], dp[16005];
list<int> E[16005];
void dfs(int nod, int root) {
dp[nod] = v[nod];
for (list<int>::iterator it = E[nod].begin(); it != E[nod].end(); it++) {
if (*it == root)
continue;
dfs(*it, nod);
if (dp[*it] > 0)
dp[nod] += dp[*it];
}
}
int main() {
// freopen("tt.txt", "r", stdin);
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> v[i];
}
for (int i = 1; i < n; i++) {
int a, b;
cin >> a >> b;
E[b].push_back(a);
E[a].push_back(b);
}
dfs(1, 0);
int ans = dp[1];
for (int i = 1; i <= n; i++) {
if (dp[i] > ans) ans = dp[i];
}
cout << ans;
return 0;
}