Pagini recente » Cod sursa (job #3237617) | Cod sursa (job #964818) | Cod sursa (job #2210221) | Cod sursa (job #466389) | Cod sursa (job #3336986)
#include <bits/stdc++.h>
std::vector<int>val;
std::vector<std::vector<int>>muchii;
std::vector<int>dp;
void dfs(int cur, int parent)
{
int suma = val[cur];
for(auto next: muchii[cur])
{
if(next != parent)
dfs(next, cur);
if(dp[next] > 0)
suma += dp[next];
}
dp[cur] = suma;
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int n;
std::cin >> n;
val.resize(n + 1);
muchii.resize(n + 1);
dp.resize(n + 1);
for(int i = 1; i <= n; i++)
{
std::cin >> val[i];
}
for(int i = 1; i <= n - 1; i++)
{
int a, b;
std::cin >> a >> b;
muchii[a].push_back(b);
muchii[b].push_back(a);
}
int ans = INT_MIN;
dfs(1, -1);
for(int i = 1; i <= n; i++)
{
ans = std::max(dp[i], ans);
}
std::cout << ans;
}