Cod sursa(job #2052063)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 29 octombrie 2017 22:23:42
Problema Asmax Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ofstream fout ("asmax.out");
ifstream fin ("asmax.in");
queue < long long > q;
long long rsp,i,n,a,b,parc[16005],aux,v[16005],ans = -1e9;
vector < long long > w[16005],fii[16005];
bool fol[16005];
void dfs()
{
    q.push( 1 );
    parc[ ++rsp ] = 1;
    fol[ 1 ] = 1;
    while( q.size() )
    {
        aux = q.front();
        q.pop();
        for( auto it : w[ aux ] )
        {
            if( fol[ it ] == 0 && it != 1 )
            {
                fii[ aux ].push_back( it );
                fol[ it ] = 1;
                parc[ ++rsp ] = it;
                q.push( it );
            }
        }
    }
}
int main()
{
    fin>>n;
    for( i = 1 ; i <= n ; i++ )
        fin>>v[ i ];
    for( i = 1 ; i < n ; i++ )
    {
        fin>>a>>b;
        w[ a ].push_back( b );
        w[ b ].push_back( a );
    }
    dfs();
    for( i = n ; i >= 1 ; i-- )
    {
        for( auto it : fii[ parc [ i ] ])
            if( v[ it ] > 0 )
                v[ parc[ i ] ] += v[ it ];
        ans = max( ans , v[ i ] );
     }
     fout<<ans;
}