Pagini recente » Cod sursa (job #2943070) | Cod sursa (job #2661189) | Cod sursa (job #1915728) | Cod sursa (job #2116669) | Cod sursa (job #2156747)
#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];
do
{
ok = 0;
for ( i = 1; i <= n ; i++ )
{
if ( val[i] > ma )
{
ma = val[i];
}
if ( grad[i] == 1 )
{
q.push( i );
ok = 1;
}
}
while ( !q.empty() )
{
nod = q.front();
q.pop();
if ( val[nod] > ma )
{
ma = val[nod];
}
if ( val[nod] <= 0 )
{
val[nod] = 0;
}
grad[ JS[nod] ]--;
grad[nod]--;
val[ JS[nod] ] += val[nod];
}
}while ( ok );
g<<ma;
return 0;
}