Pagini recente » Cod sursa (job #2384615) | Cod sursa (job #3174719) | Cod sursa (job #761967) | Cod sursa (job #2498995) | Cod sursa (job #1169451)
#include <fstream>
#include <vector>
using namespace std;
const int Nmax = 16005;
const int INF = 0x3f3f3f3f;
int maxim = -INF;
int dp[Nmax];
int V[Nmax];
vector<int> G[Nmax];
void doit(int prev, int varf)
{
dp[varf] = V[varf];
for (int x: G[varf])
{
if (x != prev)
{
doit(varf, x);
if (dp[x] > 0)
dp[varf] += dp[x];
}
}
if (maxim < dp[varf]) maxim = dp[varf];
return;
}
int main()
{
ifstream f ("asmax.in");
ofstream g ("asmax.out");
int N, a, b;
f >> N;
for (int i = 1; i <= N; i++)
f >> V[i];
for(int i = 1; i < N; i++)
{
f >> a >> b;
G[a].push_back(b);
G[b].push_back(a);
}
for (int i = 0; i <= N; i++)
dp[i] = -INF;
doit(0, 1);
g << maxim << '\n';
return 0;
}