Pagini recente » Cod sursa (job #666308) | Cod sursa (job #918729) | Cod sursa (job #2977300) | Cod sursa (job #701399) | Cod sursa (job #1670269)
#include <fstream>
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
const int Nmax=16005;
const int Mmax=32005;
int n,a,b,nr,u,maxim=-17000;
int lst[Nmax],vf[Mmax],urm[Mmax],val[Nmax],q[Nmax];
bool viz[Nmax];
void adauga ( int x , int y ){
nr++;
vf[nr]=y;
urm[nr]=lst[x];
lst[x]=nr;
}
void bfs ( int x ){
viz[x]=true;
int poz,y;
poz=lst[x];
while ( poz != 0 ){
y=vf[poz];
poz=urm[poz];
if ( !viz[y] ){
bfs(y);
if ( val[y] > 0 )
val[x]+=val[y];
}
}
if ( val[x] > maxim )
maxim=val[x];
}
int main()
{
fin>>n;
for ( int i=1 ; i<=n ; i++ )
fin>>val[i];
for ( int i=1 ; i<=n-1 ; i++ ){
fin>>a>>b;
adauga(a,b);
adauga(b,a);
}
bfs(1);
fout<<maxim;
}