Pagini recente » Cod sursa (job #89564) | Cod sursa (job #2754545) | Cod sursa (job #1250871) | Cod sursa (job #3030631) | Cod sursa (job #1148969)
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int MAX_N = 16000;
int lst[MAX_N+1], vf[2*MAX_N+2], urm[2*MAX_N+2], cost[MAX_N+1], suma[MAX_N+1];
int m, maxim = -16001;
bool viz[MAX_N+1];
void add(int x, int y)
{
m++;
vf[m] = y;
urm[m] = lst[x];
lst[x] = m;
}
void dfs(int x)
{
int y, p, sum, aux;
sum = cost[x];
viz[x] = true;
p = lst[x];
while(p != 0)
{
y = vf[p];
if(!viz[y])
{
dfs(y);
if(suma[y] > 0)
{
sum += suma[y];
}
}
p = urm[p];
}
suma[x] = sum;
if(suma[x] > maxim)
{
maxim = suma[x];
}
}
int main()
{
int n, i, a, b;
in >> n;
for(i = 1; i <= n; i++)
{
in >> cost[i];
}
for(i = 1; i <= n-1; i++)
{
in >> a >> b;
add(a,b);
add(b,a);
}
dfs(1);
out << maxim;
return 0;
}