Cod sursa(job #1780125)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 15 octombrie 2016 21:03:33
Problema Asmax Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <vector>
#include <algorithm>
const int NMAX = 16000;
using namespace std;
vector <int> g[NMAX+5];
int v[NMAX+5], d[NMAX+5];
void dfs( int nod, int tata ) {
    int i;
    for ( i = 0 ; i < g[nod].size() ; ++ i )
        if ( g[nod][i] != tata )
            dfs ( g[nod][i], nod );
    for ( i = 0 ; i < g[nod].size() ; ++ i )
        if ( g[nod][i] != tata )
            d[nod] = max ( d[nod], d[nod] + v[g[nod][i]] );
}
int main() {
    freopen ( "asmax.in", "r", stdin );
    freopen ( "asmax.out", "w", stdout );
    int n, m, i, a, b, my_max;
    scanf ( "%d", &n );
    for ( i = 1 ; i <= n ; ++ i ) {
        scanf ( "%d", &v[i] );
        d[i] = v[i];
    }
    for ( i = 1 ; i < n ; ++ i ) {
        scanf ( "%d%d", &a, &b );
        g[a].push_back ( b );
        g[b].push_back ( a );
    }
    my_max = -2000000000;
    dfs ( 1, 0 );
    for ( i = 1 ; i <= n ; ++ i )
        if ( d[i] > my_max )
            my_max = d[i];
    printf ( "%d\n", my_max );
    return 0;
}