Cod sursa(job #2669755)

Utilizator Tudor06MusatTudor Tudor06 Data 7 noiembrie 2020 20:55:40
Problema Asmax Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

const int NMAX = 16e3 + 1;
const int INF = 1e9;

vector <int> edges[NMAX];

int v[NMAX];
int viz[NMAX];

int dp[NMAX];

void init() {
    for ( int i = 1; i < NMAX; i ++ )
        dp[i] = -INF;
}
int dfs( int node ) {
    viz[node] = 1;
    if ( dp[node] == -INF ) {
        dp[node] = v[node];
        for ( auto& x : edges[node] ) {
            if ( !viz[x] ) {
                dp[node] += dfs( x );
            }
        }
    }
    return max( dp[node], 0 );
}
int main() {
    ifstream fin( "asmax.in" );
    ofstream fout( "asmax.out" );
    int n, i;
    fin >> n;
    for ( i = 0; i < n; i ++ ) {
        fin >> v[i + 1];
    }
    for ( i = 0; i < n - 1; i ++ ) {
        int a, b;
        fin >> a >> b;
        edges[a].push_back( b );
        edges[b].push_back( a );
    }
    init();
    int maxim = dfs( 1 );
    for ( i = 1; i <= n; i ++ ) {
        ///cout << dp[i] << ' ';
        maxim = max( maxim, dp[i] );
    }
    fout << maxim;
    return 0;
}