Pagini recente » Cod sursa (job #1077384) | Cod sursa (job #3305733) | Cod sursa (job #3346633) | Cod sursa (job #3325610) | Cod sursa (job #3334553)
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
vector<vector<int>> tree;
vector<int> dp;
int n;
void dfs(int node, int parent) {
for (int nei : tree[node]) {
if (nei != parent) {
dfs(nei, node);
if (dp[nei] > 0) {
dp[node] += dp[nei];
}
}
}
}
int main() {
cin >> n;
tree.assign(n + 2, vector<int>());
dp.assign(n + 2, 0);
for (int i = 1 ; i <= n ; ++i) {
cin >> dp[i];
}
for (int i = 1 ; i <= n - 1 ; ++i) {
int src, dest; cin >> src >> dest;
tree[src].push_back(dest);
tree[dest].push_back(src);
}
dfs(1, 0);
int maxx = INT_MIN;
for (int i = 1 ; i <= n ; ++i) {
maxx = max(maxx, dp[i]);
}
cout << maxx;
return 0;
}