Pagini recente » Cod sursa (job #2657855) | Cod sursa (job #3270416) | Cod sursa (job #1599194) | Cod sursa (job #2300682) | Cod sursa (job #612395)
Cod sursa(job #612395)
#include <fstream>
#include <vector>
#include <cstring>
#define INF (1<<30)
#define NMAX 16001
#define pb push_back
#define Max(a,b) (a>b) ? a : b
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int N, i, x, y, Val[NMAX], SMax, Sct;
vector< int > A[NMAX];
bool USED[NMAX];
inline void DF( int Nod, int &SumaCurenta )
{
USED[Nod] = true;
for( vector< int >::iterator Fiu = A[Nod].begin(); Fiu != A[Nod].end(); Fiu++ )
if( !USED[*Fiu] )
{
int Suma = Val[*Fiu];
DF( *Fiu, Suma );
if( Suma > 0 ) SumaCurenta += Suma;
SMax = Max( SMax, SumaCurenta );
SMax = Max( SMax, Val[*Fiu] );
}
}
int main()
{
in >> N;
for( i = 1; i <= N; i++ )
in >> Val[i];
for( i = 1; i < N; i++ )
{
in >> x >> y;
A[x].pb( y );
A[y].pb( x );
}
Sct = Val[1];
SMax = -INF;
memset( USED, false, sizeof(USED) );
DF( 1, Sct );
SMax = Max( SMax, Val[1] );
out << SMax << '\n';
return 0;
}