Cod sursa(job #1782275)

Utilizator antracodRadu Teodor antracod Data 17 octombrie 2016 21:52:28
Problema Asmax Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

const int NMAX = 16000;

int val[NMAX+1];
int f[NMAX];
vector <int> Arb[NMAX+1];
deque <int> Q;
int n;

int solve(int x)
{
    int p=0,sum=0;
    sum+=val[x];
    for(int i=0;i<Arb[x].size();i++)
    {
        if(f[Arb[x][i]]==0)
        {
            f[Arb[x][i]]=1;
            Q.push_back(Arb[x][i]);
            p++;
        }
    }
        for(int i=1;i<=p;i++)
        {
            int k;
            k=Q.back();
            Q.pop_back();
            int m=solve(k);
            if(m>=0)
                sum+=m;
        }

    return sum;
}


int main()
{
      int maxim=-99999,imax;
      in>>n;
      for(int i=1;i<=n;i++)
      {
          in>>val[i];
          if(val[i]>=maxim)
          {
              maxim=val[i];
              imax=i;
          }
      }
      for(int i=1;i<n;i++)
      {
          int x,y;
          in>>x>>y;
          Arb[x].push_back(y);
          Arb[y].push_back(x);
      }
      f[imax]=1;
      out<<solve(imax);
}