Cod sursa(job #2236985)

Utilizator Radu_FilipescuFilipescu Radu Radu_Filipescu Data 31 august 2018 11:31:38
Problema Asmax Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <vector>

#define NMAX 16002

using namespace std;

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

int N;
int val[ NMAX ];

vector < int > Ad[ NMAX ];

int parent[ NMAX ];

int best[ NMAX ];

void Read()
{
  fin >> N;

  for( int i = 1; i <= N; ++i )
    fin >> val[ i ];

  int a, b;

  for( int i = 1; i < N; ++i )
  {
    fin >> a >> b;

    Ad[ a ].push_back( b );

    parent[ b ] = a;
  }

  fin.close();
}

void BEST( int nod )
{
  best[ nod ] = val[ nod ];

  if( Ad[ nod ].size() > 0 )
  {
    int sum = 0;

    for( int i = 0; i < Ad[nod].size(); ++i )
    {
      BEST( Ad[nod][i] );

      sum = best[ Ad[nod][i] ];

      if( sum > 0 ) best[ nod ] += sum;
    }
  }
}

void Do()
{
   int root;

   for( int i = 1; i <= N; ++i )
      if( parent[ i ] == 0 )
        {
          root = i;

          break;
        }

   BEST( root );
}

void Print()
{
 // for( int i = 1; i <= N; ++i )
 //   fout << val[i] << ' ' << best[i] << '\n';

  int valmax = -9999;

  for( int i = 1; i <= N; ++i )
    valmax = max( valmax, best[i] );

  fout << valmax << '\n';

  fout.close();
}

int main()
{
    Read();
    Do();
    Print();

    return 0;
}