Pagini recente » Cod sursa (job #1438358) | Cod sursa (job #884212) | Cod sursa (job #3270200) | Cod sursa (job #2958936) | Cod sursa (job #2986920)
#include <bits/stdc++.h>
using namespace std;
ifstream in ("asmax.in");
ofstream out ("asmax.out");
const int NMAX = 16e3;
int a[NMAX + 5];
vector<int> g[NMAX + 5];
int dp[NMAX + 5]; /// dp[u] = suma maxima a unui subarbore cu radacina in u
void dfs (int u, int w = 0)
{
dp[u] = a[u];
for (int v : g[u])
{
if (v != w)
{
dfs(v, u);
if (dp[v] > 0)
dp[u] += dp[v];
}
}
}
int main()
{
int n;
in >> n;
for (int i=1; i<=n; i++)
in >> a[i];
for (int i=1; i<n; i++)
{
int u, v;
in >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1);
int ans = -2e9;
for (int i=1; i<=n; i++)
{
ans = max(ans, dp[i]);
}
out << ans;
return 0;
}