Pagini recente » Cod sursa (job #1137135) | Cod sursa (job #1632119) | Cod sursa (job #342200) | Cod sursa (job #2705682) | Cod sursa (job #2156760)
#include <fstream>
#include <queue>
using namespace std;
ifstream f ("asmax.in");
ofstream g ("asmax.out");
int n, m, val[16005], grad[16005], a, b, ma, nod, JS[16005], i, ok;
queue < int > q;
int main()
{
f>>n;
for ( i = 1; i <= n ; i++ )
{
f>>val[i];
}
for ( i = 1 ; i <= n - 1 ; i++ )
{
f>>a>>b;
JS[ b ] = a;
grad[a]++;
grad[b]++;
}
ma = val[1];
for ( i = 1; i <= n ; i++ )
{
if ( grad[i] == 1 )
{
q.push( i );
}
}
while ( !q.empty() )
{
nod = q.front();
q.pop();
ma = max ( ma, val[nod] );
if ( val[nod] > ma )
{
ma = val[nod];
}
if ( val[nod] > 0 )
{
val[ JS[nod] ] += val[nod];
}
grad[ JS[nod] ]--;
grad[nod]--;
if ( grad[ JS[nod] ] == 1 )
{
q.push( JS[nod] );
}
}
g<<ma;
return 0;
}