Pagini recente » Cod sursa (job #1256468) | Cod sursa (job #1590488) | Cod sursa (job #1609658) | Cod sursa (job #389212) | Cod sursa (job #1605192)
#include <iostream>
#include <fstream>
#include <vector>
#include <utility>
using namespace std;
ifstream fin ("asmax.in");
ofstream fout ("asmax.out");
#define MAXN 16050
#define MINC -16000
vector <vector <int> > edge;
vector <int> best, used;
int N;
int solution = MINC;
int DFS(int node)
{
int curr_sum = 0;
used[node] = 1;
for (int i = 0; i < edge[node].size(); ++i)
if (!used[edge[node][i]])
{
int sub_sum = DFS(edge[node][i]);
if (sub_sum > 0)
curr_sum += sub_sum;
}
curr_sum += best[node];
if (curr_sum > solution)
solution = curr_sum;
if (curr_sum > 0)
return curr_sum;
return 0;
}
int main()
{
fin >>N;
edge.resize(N+1);
best.resize(N+1);
used.resize(N+1);
for (int i = 1; i <= N; ++i)
fin >>best[i];
for (int i = 1; i < N; ++i)
{
int x, y;
fin >>x >>y;
edge[x].push_back(y);
edge[y].push_back(x);
}
DFS(1);
fout <<solution <<'\n';
return 0;
}