Pagini recente » Cod sursa (job #1627533) | Cod sursa (job #2755226) | Cod sursa (job #3194053) | Cod sursa (job #3205014) | Cod sursa (job #2550373)
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 16005;
ifstream cin("asmax.in");
ofstream cout("asmax.out");
int cost[NMAX], d[NMAX], ans = -1005;
vector <int> g[NMAX];
void dfs(int node, int father)
{
int aux = 0;
for(auto x: g[node]) {
if(x != father) {
dfs(x, node);
aux += max(d[x], 0);
}
}
aux += cost[node];
if(node == 1)
d[node] = aux;
else
d[node] = max(aux, 0);
ans = max(ans, d[node]);
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; ++i) {
cin >> cost[i];
ans = max(ans, cost[i]);
}
for(int i = 1; i < n; ++i) {
int a, b;
cin >> a >> b;
g[a].emplace_back(b);
g[b].emplace_back(a);
}
dfs(1, -1);
cout << ans << "\n";
return 0;
}