Cod sursa(job #1652292)

Utilizator cristinamateiCristina Matei cristinamatei Data 14 martie 2016 20:56:36
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int N = 16003;
int a[N], n;
int nr, lst[N], vf[N*2], urm[N*2], sum[N];
bool viz[N];

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

void dfs( int x )
{
    viz[x] = true;
    int poz, y;
    poz = lst[x];
    while( poz != 0 )
    {
        y = vf[poz];
        if ( viz[y] == false )
        {
            dfs(y);
            if ( sum[y] > 0 )
                sum[x] += sum[y];
        }
        poz = urm[poz];
    }
    if ( sum[x] < 0 )
        sum[x] = a[x];
    else sum[x] += a[x];
}

int main()
{
    int i, x, y;
    in >> n;
    for ( i = 1; i <= n; i++ )
        in >> a[i];
    for ( i = 1; i <= n-1; i++ )
    {
        in >> x >> y;
        adauga(x, y);
        adauga(y, x);
    }

    for ( i = 1; i <= n; i++ )
    {
        if ( viz[i] == false )
            dfs(i);
    }
    int nrm = sum[1];
    for ( i = 2; i <= n; i++ )
        if ( nrm < sum[i] )
            nrm = sum[i];
    out << nrm<<'\n';


    return 0;
}