Pagini recente » Cod sursa (job #2418944) | Cod sursa (job #1038840) | Cod sursa (job #1739749) | Cod sursa (job #1510856) | Cod sursa (job #1658766)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N= 16001,K=1001;
int lst[N*2],vf[N*2],urm[N*2],v[N],n,nr,sol=0,scor[N*2];
bool viz[N];
void add(int x, int y)
{
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void dfs(int x)
{
int y,p;
p=lst[x];
viz[x]=true;
while(p!=0)
{
y=vf[p];
if(!viz[y]){
dfs(y);
if(scor[y] > 0)
scor[x]+=scor[y];
}
p=urm[p];
}
scor[x]+=v[x];
}
int maxim(int i, int j)
{
if(i<j)
return j;
else
return i;
}
int main()
{
int i,j,x,y,maxi;
in>>n;
for(i=1;i<=n;i++)
{
in>>v[i];
}
for(i=1;i<n;i++)
{
in>>x>>y;
add(x,y);
add(y,x);
}
dfs(1);
maxi=scor[1];
for(i=1;i<=n;i++)
{
maxi=maxim(maxi,scor[i]);
}
out<<maxi;
return 0;
}