Cod sursa(job #2072387)

Utilizator VarticeanNicolae Varticean Varticean Data 21 noiembrie 2017 20:06:50
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
int cost[16100],n, sum, maxim = - 1<<30;
vector < int > v[16100];
bitset < 16100 > viz;
int tata[16100];

void read()
{
  in >> n;
  for ( int i=1; i<=n; i++)
     in >> cost[i];
  int a,b;
  for(int i=1; i<n; i++)
  {
       in >> a >> b;
       v[a].push_back(b);
       v[b].push_back(a);
  }
}

void dfs( int nod )
{
     viz[nod] = 1;

     for( int i=0; i<v[nod].size(); i++)
     {
          if ( !viz[v[nod][i]]) dfs(v[nod][i]);

          if( cost[v[nod][i]] > 0 && v[nod][i] != tata[nod] ) cost[ tata[ v[nod][i] ]] += cost[v[nod][i]];
          maxim = max(maxim, cost[nod]);
     }
}

void dfs1( int nod )
{
     viz[nod] = 1;

     for(int i=0; i<v[nod].size(); i++)
         if( !viz[ v[nod][i] ] ) tata[ v[nod][i] ] = nod, dfs1(v[nod][i]);
}

int main()
{
     read();
     dfs1(1);
     viz.reset();
      dfs(1);
          out << maxim;

    return 0;
}