Cod sursa(job #2156755)

Utilizator Victor24Vasiesiu Victor Victor24 Data 8 martie 2018 23:25:02
Problema Asmax Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 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];

    do
    {
        ok = 0;

        for ( i = 1; i <= n ; i++ )
        {
            ma = max ( 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[ JS[nod] ] += val[nod];
            }

            grad[ JS[nod] ]--;
            grad[nod]--;

        }
    }while ( ok );

    g<<ma;

    return 0;
}