Pagini recente » Istoria paginii grigore-moisil-2011/clasament/5-6 | Istoria paginii utilizator/achim | Istoria paginii utilizator/christalknight | Monitorul de evaluare | Cod sursa (job #2706095)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("asmax.in");
ofstream g("asmax.out");
const int NMAX = 16001;
vector<int>G[NMAX];
bool viz[NMAX];
int DP[NMAX], v[NMAX];
int N, maxx = -NMAX * 1000;
void citire()
{
f >> N;
for(int i = 1; i <= N; i++)
f >> v[i];
for(int i = 1; i < N; i++)
{
int x, y;
f >> x >> y;
G[x].push_back(y);
G[y].push_back(x);
}
}
void DFS(int nod)
{
viz[nod] = 1;
DP[nod] = v[nod];
for(auto &x : G[nod])
if(!viz[x])
{
DFS(x);
DP[nod] += (DP[x] > 0)?DP[x]:0;
}
maxx = max(maxx, DP[nod]);
}
int main()
{
citire();
DFS(1);
g << maxx;
return 0;
}