Pagini recente » Cod sursa (job #1763601) | Cod sursa (job #926830) | Cod sursa (job #7091) | Cod sursa (job #2437033) | Cod sursa (job #1685934)
#include <fstream>
#include <set>
#define NMAX 16001
using namespace std;
ifstream fin("asmax.in");
ofstream fout("asmax.out");
set <int> L[16001*1000];
int n,v[NMAX],partial;
long long int sume[NMAX];
bool used[NMAX];
long long int dfs( int i , int p )
{
sume[i] += p ;
if( !used[i] )
{
used[i] = true;
if( L[i].size() == 1 )
return sume[i];
else
for( set<int>::iterator it = L[i].begin() ; it != L[i].end() ; ++it )
{
int j = *it;
if( ! used[j] )
{
sume[i] += max( sume[i] , dfs( j , sume[i] ) ) - sume[i] ;
}
}
}
return sume[i];
}
int main()
{
fin >> n ;
for( int i = 1 ; i <= n ; ++i )
fin >> v[i];
for( int i = 1 ; i <= n ; ++i )
{
int a,b ;
fin >> a >> b;
L[a].insert(b);
L[b].insert(a);
}
long long int max1 = -16005 ;
for( int i = 1 ; i <= n ; ++i )
{
for( int j = 1 ; j <= n ; ++j )
{
sume[j] = v[j];
used[j] = false;
}
partial = sume[i];
max1 = max( max1 , dfs( i , 0 ) );
}
fout << max1;
return 0;
}