Cod sursa(job #1685934)

Utilizator MithrilBratu Andrei Mithril Data 11 aprilie 2016 22:27:53
Problema Asmax Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <set>
#define NMAX 16001
using namespace std;

ifstream fin("asmax.in");
ofstream fout("asmax.out");
set <int> L[16001*1000];
int n,v[NMAX],partial;
long long int sume[NMAX];
bool used[NMAX];

long long int dfs( int i , int p )
{
    sume[i] += p ;

    if( !used[i] )
    {
        used[i] = true;
        if( L[i].size() == 1 )
            return sume[i];
        else
            for( set<int>::iterator it = L[i].begin() ; it != L[i].end() ; ++it )
            {
                int j = *it;
                    if( ! used[j] )
                    {
                        sume[i] += max( sume[i] , dfs( j , sume[i] ) ) - sume[i] ;
                    }

            }
    }
    return sume[i];
}

int main()
{
    fin >> n ;
    for( int i = 1 ; i <= n ; ++i )
        fin >> v[i];

   for( int i = 1 ; i <= n ; ++i )
    {
        int a,b ;
        fin >> a >> b;
        L[a].insert(b);
        L[b].insert(a);
    }

    long long int max1 = -16005 ;
    for( int i = 1 ; i <= n ; ++i )
    {
        for( int j = 1 ; j <= n ; ++j )
        {
            sume[j] = v[j];
            used[j] = false;
        }
        partial = sume[i];
        max1 = max( max1 , dfs( i , 0 ) );
    }
    fout << max1;
    return 0;
}