Pagini recente » Cod sursa (job #2700285) | Cod sursa (job #2229726) | Cod sursa (job #1099798) | Cod sursa (job #2194084) | Cod sursa (job #2199285)
#include <iostream>
#include <fstream>
#define MAX_NM 16001
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
int n, nr, vf[2 * MAX_NM], urm[2 * MAX_NM], lst[MAX_NM], viz[MAX_NM], v[MAX_NM], smax;
void adauga(int x, int y)
{
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
int dfs(int x)
{
viz[x] = true;
int p = lst[x], y, d, s = v[x];
while (p != 0) {
y = vf[p];
if (!viz[y]) if ((d = dfs(y)) >= 0) s += d;
p = urm[p];
}
if (s > smax) smax = s;
return s;
}
int main()
{
int x, y;
fin >> n;
for (int i = 1 ; i <= n ; i++) fin >> v[i];
for (int i = 1 ; i < n ; i++) {
fin >> x >> y;
adauga(x, y);
adauga(y, x);
}
dfs(1);
fout << smax;
return 0;
}