Pagini recente » Monitorul de evaluare | Cod sursa (job #596330) | Cod sursa (job #573624) | Cod sursa (job #1661336) | Cod sursa (job #863989)
Cod sursa(job #863989)
//Vasilut
#include<fstream>
#include<vector>
#include<bitset>
#include<algorithm>
#define NN 16009
#define pb push_back
const char iname[]="asmax.in";
const char oname[]="asmax.out";
using namespace std;
ofstream out(oname);
int n,cost[NN];
bitset< NN > uz;
vector < int > G[NN];
typedef vector < int >:: iterator IT;
void dfs( int start)
{
uz[ start] = 1;
for ( IT I = G[start].begin();I!=G[start].end(); ++I)
if ( !uz[ *I ] )
{
dfs( *I );
if ( cost[ *I ] > 0 )
cost[start]+= cost[*I];
}
}
int main()
{
ifstream in ( iname );
in >> n ;
for ( int i =1 ;i<=n; i++)
in >> cost[i];
for ( int x,y, i = 1 ; i<n ;i++)
{
in >> x >> y;
G[x].pb(y);
G[y].pb(x);
}
dfs(1);
sort( cost + 1 ,cost + n + 1 , greater<int>() );
out << cost[1];
return 0;
}