Cod sursa(job #2201297)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 4 mai 2018 09:48:39
Problema Asmax Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define NMAX 16000
#define INF NMAX * 1000 + 1

int n, nr, val[1 + NMAX], lst[1 + NMAX], vf[1 + 2 * NMAX], viz[1 + 2 * NMAX], urm[1 + 2 * NMAX], maxim = -INF;

void adauga ( int x, int y ) {
    ++nr;
    vf[nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

int dfs ( int x ) {
    viz[x] = 1;
    int p = lst[x], y;
    int sum = val[x];
    while ( p != 0 ) {
        y = vf[p];
        if ( !viz[y] ) {
            int d = dfs ( y );
            sum += ( d > 0 ) * d;
        }
        p = urm[p];
    }
    if ( sum > maxim )
        maxim = sum;

    return sum;
}

int main() {
    FILE *fin = fopen ( "asmax.in", "r" );
    fscanf ( fin, "%d", &n );
    int i;
    for ( i = 1; i <= n; ++i )
        fscanf ( fin, "%d", &val[i] );
    int x, y;
    for ( i = 1; i < n; ++i ) {
        fscanf ( fin, "%d%d", &x, &y );
        adauga ( y, x );
        adauga ( x, y );
    }
    fclose ( fin );

    dfs ( 1 );

    FILE *fout = fopen ( "asmax.out", "w" );
    fprintf ( fout, "%d", maxim );
    fclose ( fout );

    return 0;
}