Cod sursa(job #1025452)

Utilizator Teodor94Teodor Plop Teodor94 Data 9 noiembrie 2013 23:31:13
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define MAX_N 16000

int val[MAX_N];
vector< int > v[MAX_N];
bool marked[MAX_N];
int d[MAX_N];

void read( FILE *fin, int &n ) {
    fscanf( fin, "%d", &n );
    for ( int i = 0; i < n; ++i )
        fscanf( fin, "%d", &val[i] );
    for ( int i = 0; i < n - 1; ++i ) {
        int x, y;
        fscanf( fin, "%d%d", &x, &y );
        --x, --y;

        v[x].push_back( y );
        v[y].push_back( x );
    }
}

void dfs( int node ) {
    marked[node] = true;

    for ( vector< int >::iterator it = v[node].begin(); it != v[node].end(); ++it )
        if ( !marked[*it] ) {
            dfs( *it );
            d[node] = max( d[node], d[node] + d[*it] );
        }
}

int main() {
    FILE *fin, *fout;

    fin = fopen( "asmax.in", "r" );
    int n;
    read( fin, n );
    fclose( fin );

    for ( int i = 0; i < n; ++i )
        d[i] = val[i];

    dfs( 0 );

    fout = fopen( "asmax.out", "w" );
    int ans = d[0];
    for ( int i = 1; i < n; ++i )
        ans = max( ans, d[i] );
    fprintf( fout, "%d\n", ans );
    fclose( fout );
}