Pagini recente » Cod sursa (job #443360) | Cod sursa (job #2139766) | Cod sursa (job #476587) | Cod sursa (job #2071593) | Cod sursa (job #2283992)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
vector <int> G[16005];
int c[16005], dp[16005];
int n, sol, x, y;
bool viz[16005];
void dfs (int nod)
{
viz[nod] = true;
for (int i = 0; i < G[nod].size(); i++)
{
if (!viz[G[nod][i]])
{
dfs(G[nod][i]);
}
}
dp[nod] = c[nod];
for (int i = 0; i < G[nod].size(); i++)
{
if (dp[G[nod][i]] > 0) dp[nod] += dp[G[nod][i]];
}
sol = max(sol, dp[nod]);
}
int main()
{
f >> n;
for (int i = 1; i <= n; i++)
{
f >> c[i];
}
for (int i = 1; i <= n-1; i++)
{
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
dfs(1);
g << sol << '\n';
return 0;
}