Pagini recente » Cod sursa (job #1191233) | Cod sursa (job #2054835) | Cod sursa (job #733699) | Cod sursa (job #1961571) | Cod sursa (job #2052063)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ofstream fout ("asmax.out");
ifstream fin ("asmax.in");
queue < long long > q;
long long rsp,i,n,a,b,parc[16005],aux,v[16005],ans = -1e9;
vector < long long > w[16005],fii[16005];
bool fol[16005];
void dfs()
{
q.push( 1 );
parc[ ++rsp ] = 1;
fol[ 1 ] = 1;
while( q.size() )
{
aux = q.front();
q.pop();
for( auto it : w[ aux ] )
{
if( fol[ it ] == 0 && it != 1 )
{
fii[ aux ].push_back( it );
fol[ it ] = 1;
parc[ ++rsp ] = it;
q.push( it );
}
}
}
}
int main()
{
fin>>n;
for( i = 1 ; i <= n ; i++ )
fin>>v[ i ];
for( i = 1 ; i < n ; i++ )
{
fin>>a>>b;
w[ a ].push_back( b );
w[ b ].push_back( a );
}
dfs();
for( i = n ; i >= 1 ; i-- )
{
for( auto it : fii[ parc [ i ] ])
if( v[ it ] > 0 )
v[ parc[ i ] ] += v[ it ];
ans = max( ans , v[ i ] );
}
fout<<ans;
}