Pagini recente » Cod sursa (job #3144676) | Cod sursa (job #3271494) | Borderou de evaluare (job #3187029) | Cod sursa (job #2781703) | Cod sursa (job #2385413)
#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]) {
// observa ca apelez mai intai recursiv ca sa stiu ca am S[v] calculat
dfs(v);
if (S[v] > 0)
S[u] += S[v]; // folosesc direct vectorul S
}
}
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;
}