Pagini recente » Cod sursa (job #2150387) | Cod sursa (job #372860) | Cod sursa (job #288909) | Cod sursa (job #1446201) | Cod sursa (job #2563219)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int N_MAX = 16e3 + 1;
vector<int> cost(N_MAX);
vector<vector<int>> tree(N_MAX, vector<int>());
int N;
int ans = -(1<<29);
int dp_dfs(int node, int parent)
{
int sum = 0;
for(int next : tree[node])
{
if(next == parent) continue;
int sub_sum = dp_dfs(next, node);
if(sub_sum > 0)
sum += sub_sum;
}
sum += cost[node];
ans = max(ans, sum);
return sum;
}
int main()
{
fin >> N;
for(int i = 1; i <= N; ++i)
fin >> cost[i];
for(int x, y, i = 1; i < N; ++i)
fin >> x >> y, tree[x].push_back(y), tree[y].push_back(x);
dp_dfs(1, -1);
fout << ans;
}