Pagini recente » Cod sursa (job #570583) | Cod sursa (job #2917432) | Cod sursa (job #3314918) | Cod sursa (job #78021) | Cod sursa (job #3336967)
#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("brad.in", "r", stdin);
freopen("brad.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;
}