Pagini recente » Cod sursa (job #2727024) | Cod sursa (job #1575600) | Cod sursa (job #3186984) | Cod sursa (job #1261180) | Cod sursa (job #2385418)
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
#define N 16001
bool use[N];
int S[N];
vector<int> a[N];
int n;
void dfs(int u) {
use[u] = true;
for (auto v : a[u]) {
if (!use[v]) {
dfs(v);
if (S[v] > 0) {
S[u] += S[v];
}
}
}
}
int main() {
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; ++i)
cin >> S[i];
int p, q;
for (int i = 1; i < n; ++i) {
cin >> p >> q;
a[p].push_back(q);
a[q].push_back(p);
}
dfs(1);
int result = INT_MIN;
for (int i = 1; i <= n; ++i)
result = max(result, S[i]);
cout << result << endl;
}