Cod sursa(job #1723723)

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

#define NMAX 16001

vector < int > v[ NMAX ];
int vizt[ NMAX ];
int bestNod[ NMAX ];
int nodVal[ NMAX ];

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

void dfs( int x ){

    int n, i, k, 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, nodVal[ x ] );

}

int main()
{

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

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

    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 );
    printf("%d\n",bestNod[ 1 ]);


    return 0;

}