Pagini recente » Cod sursa (job #944456) | Cod sursa (job #1066511) | Cod sursa (job #3295896) | Cod sursa (job #2266615) | Cod sursa (job #1652390)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N_max = 16005;
int vf[2 * (N_max - 1)];
int urm[2 * (N_max - 1)];
int lst[N_max];
int nr;
int s[N_max];
bool viz[N_max];
int scor[N_max];
int sol;
int N;
void adauga(int x, int y)
{
// ADAUGA IN LISTA LUI x PE y
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void dfs(int x)
{
int y, p;
viz[x] = true;
// PARCURG VECINII y AI LUI x
p = lst[x];
while(p != 0)
{
y = vf[p];
scor[x] += s[x];
if(!viz[y]) dfs(y);
if(scor[y] > 0) scor[x] += scor[y];
p = urm[p];
}
}
int main()
{
int i, x, y;
in >> N;
for(i = 1; i <= N; i++) in >> s[i];
for(i = 1; i < N; i++)
{
in >> x >> y;
adauga(x, y);
adauga(y, x);
}
dfs(1);
sol = scor[1];
for(i = 2; i <= N; i++) sol = max(sol, scor[i]);
out << sol;
return 0;
}