Pagini recente » Cod sursa (job #879282) | Cod sursa (job #999874) | Cod sursa (job #1184715) | Cod sursa (job #463222) | Cod sursa (job #1658710)
#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,n;
void adauga(int x, int y)
{
nr++;
vf[nr] = y;
urm[nr] = lst[x];
lst[x] = nr;
}
void dfs(int x)
{
int y, p;
viz[x] = true;
p = lst[x];
while(p)
{
y = vf[p];
if(!viz[y])
{
dfs(y);
if(scor[y] > 0) scor[x] += scor[y];
}
p = urm[p];
}
scor[x]+= s[x];
}
int main()
{
int x,y;
in>>n;
for (int i=1;i<=n;i++)
in>>s[i];
for(int i=1;i<=n;i++)
{
in>>x>>y;
adauga(x,y);
adauga(y,x);
}
dfs(1);
sol=scor[1];
for(int i=2;i<=n;i++)
sol=max(sol,scor[i]);
out<<sol;
return 0;
}