Pagini recente » Istoria paginii utilizator/rsmardare | Profil ana_mirela | Monitorul de evaluare | Istoria paginii runda/antrenament_1 | Cod sursa (job #2044129)
#include <fstream>
#include <iostream>
#include <vector>
#include <string.h>
#include <stack>
#define Nmax 16000
using namespace std;
vector <pair<long,long> > vec[Nmax];
long vazut[Nmax];
long v[Nmax];
ifstream in("asmax.in");
ofstream out("asmax.out");
long s = 0, ma = -10000000;
int dfs(int node)
{
vazut[node] = 1;
int valoare = v[node];
int rez;
for(auto e : vec[node])
{
if(vazut[e.first] == 0)
{
rez = dfs(e.first);
if(rez > 0)
valoare += rez;
}
}
if(valoare > ma)
ma = valoare;
return valoare;
}
int main()
{
long N,x,y;
in >> N;
memset(vazut,0,sizeof(vazut));
for(int i = 1; i <= N; i++)
{
in >> x;
v[i] = x;
}
for(int i = 0; i < N-1; i++)
{
in >> x >> y;
vec[y].push_back(make_pair(x,v[x]));
vec[x].push_back(make_pair(y,v[y]));
}
dfs(1);
out << ma <<'\n';
return 0;
}