Cod sursa(job #612394)

Utilizator stay_awake77Cangea Catalina stay_awake77 Data 7 septembrie 2011 12:25:46
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#include <vector>
#include <cstring>

#define INF (1<<30)
#define NMAX 16001

#define pb push_back
#define Max(a,b) (a>b) ? a : b

using namespace std;

ifstream in("asmax.in");
ofstream out("asmax.out");

int N, i, x, y, Val[NMAX], SMax, Sct;
vector< int > A[NMAX];
bool USED[NMAX];

inline void DF( int Nod, int &SumaCurenta )
{
    USED[Nod] = true;

    for( vector< int >::iterator Fiu = A[Nod].begin(); Fiu != A[Nod].end(); Fiu++ )
        if( !USED[*Fiu] )
        {
            int Suma = Val[*Fiu];
            DF( *Fiu, Suma );

            if( Suma > 0 ) SumaCurenta += Suma;
            SMax = Max( SMax, SumaCurenta );
        }
}

int main()
{
    in >> N;
    for( i = 1; i <= N; i++ )
        in >> Val[i];
    for( i = 1; i < N; i++ )
    {
        in >> x >> y;
        A[x].pb( y );
        A[y].pb( x );
    }

    Sct = Val[1];
    SMax = -INF;
    memset( USED, false, sizeof(USED) );

    DF( 1, Sct );

    out << SMax << '\n';

    return 0;
}