Pagini recente » Cod sursa (job #783759) | Cod sursa (job #606428) | Cod sursa (job #92545) | Cod sursa (job #2541256) | Cod sursa (job #3198549)
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int nmax = 69696;
int dp[nmax][2], v[nmax];
vector<vector<int>> adj;
void dfs(int i, int tata) {
int sum = 0, maxx = -1e9;
for(auto it : adj[i]) {
if(it != tata) {
dfs(it, i);
if(dp[it][1] > 0) {
sum += dp[it][1];
}
maxx = max(maxx, dp[it][0]);
}
}
dp[i][1] = max(dp[i][1], sum + v[i]);
dp[i][0] = max(maxx, dp[i][1]);
//cout << i << " " << sum << " " << v[i] << '\n';
}
int32_t main() {
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int n;
cin >> n;
adj.resize(n + 1);
for(int i = 1; i <= n; i ++) {
cin >> v[i];
dp[i][0] = dp[i][1] = -1e9;
}
for(int i = 1; i < n; i ++) {
int a, b;
cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(1, 0);
cout << dp[1][0];
return 0;
}