Pagini recente » Cod sursa (job #1202890) | Cod sursa (job #1302531) | Cod sursa (job #205217) | Cod sursa (job #1601932) | Cod sursa (job #1474074)
#include <fstream>
#include <vector>
#include <bitset>
const int MAX_N = 16000;
const char IN[ ] = "asmax.in";
const char OUT[ ] = "asmax.out";
const int INF = 2000000000;
using namespace std;
ifstream fin ( IN );
ofstream fout ( OUT );
vector < int > adj[ MAX_N ];
bitset < MAX_N > seen;
int cost[ MAX_N ];
void dfs( int node )
{
seen[ node ] = 1;
for ( auto son : adj[ node ] )
{
if ( !seen[ son ] )
{
dfs( son );
cost[ node ] += cost[ son ] & -( cost[ son ] > 0 );
}
}
}
int main ( void )
{
int n;
int u, v;
int ans;
fin >> n;
for ( int i = 0; i < n; i++ )
{
fin >> cost[ i ];
}
for (int i = 1; i < n; i++ )
{
fin >> u >> v;
adj[ u - 1 ].push_back( v - 1 );
adj[ v - 1 ].push_back( u - 1 );
}
fin.close( );
dfs( 0 );
ans = -INF;
for ( int i = 0; i < n; i++ )
{
ans = ans ^ ( ( ans ^ cost[ i ] ) & -( cost[ i ] > ans ) );
}
fout << ans << '\n';
fout.close( );
return 0;
}