Cod sursa(job #2156760)

Utilizator Victor24Vasiesiu Victor Victor24 Data 8 martie 2018 23:34:57
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#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;
}