Cod sursa(job #1723726)

Utilizator catu_bogdan_99Catu Bogdan catu_bogdan_99 Data 1 iulie 2016 14:22:49
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>
#include <vector>
using namespace std;

#define NMAX 16005
#define INFI 0x3f3f3f

vector < int > v[ NMAX ];

int vizt[ NMAX ];
int nodVal[ NMAX ];
int bestNod[ NMAX ];


int maxim( int a, int b ){
    if( a > b ) return a;
    return b;
}

void dfs( int x ){

    int n, i, nodCopil, subArbore;

    if( vizt[ x ] ) return ;
    vizt[ x ] = 1;

    subArbore = 0;
    n = v[ x ].size();

    for( i = 0; i < n; ++i){
        nodCopil = v[ x ][ i ];
        if( vizt[ nodCopil ] == 0 ){
            dfs( nodCopil );
            if( bestNod[ nodCopil ] > 0 ) subArbore += bestNod[ nodCopil ];
        }
    }

    bestNod[ x ] = maxim( nodVal[ x ] + subArbore, 0 );

}

int main()
{

    freopen("asmax.in","r",stdin);
    freopen("asmax.out","w",stdout);

    int n, m, i, j, s, t, x, y, maxi;

    scanf("%d",&n);
    for( i = 1; i <= n; ++i ) scanf("%d",&nodVal[ i ]);


    m = n - 1;
    while( m-- ){
        scanf("%d%d",&x,&y);
        v[ x ].push_back( y );
        v[ y ].push_back( x );
    }

    dfs( 1 );

    maxi = -INFI;
    for( i = 1; i <= n; ++i)
        maxi = maxim( maxi, bestNod[ i ] );

    printf("%d\n",maxi);


    return 0;

}