Cod sursa(job #1388276)

Utilizator felixiPuscasu Felix felixi Data 15 martie 2015 12:51:55
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

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

const int NMAX = 16000;
const int INF  = ( 1 << 29 );

typedef long long I64;

vector <int> G[NMAX+3];
I64 d[NMAX+3], v[NMAX+3];
int N, Ans = 0;
bool viz[NMAX+3];

void DFS( int nod ) {
    viz[nod] = 1;
    d[nod] = v[nod];

    for( int i = 0;  i < (int)G[nod].size();  ++i ) {
        int x = G[nod][i];
        if( !viz[x] ) {
            DFS( x );
            d[nod] += max( 0LL, d[x] );
        }
    }
}

int main() {
    in >> N;
    for( int i = 1;  i <= N;  ++i ) {
        in >> v[i];
        d[i] = -INF;
    }
    for( int i = 1;  i < N;  ++i ) {
        int x,y;
        in >> x >> y;
        G[x].push_back(y);
        G[y].push_back(x);
    }

    DFS(1);
    Ans = *max_element( d+1, d+N+1 );
    out << Ans << '\n';
    return 0;
}