Cod sursa(job #1692486)

Utilizator Bodo171Bogdan Pop Bodo171 Data 20 aprilie 2016 22:27:31
Problema Asmax Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include<fstream>
#include<bitset>
#include<queue>
using namespace std;
int tt[16005],best[16005],mx,i,n,a,b,x;
bitset<16005> parent;
bitset<16005> inq;
queue<int> q;
int main()
{
    ifstream f("asmax.in");
    ofstream g("asmax.out");
    f>>n;
    mx=-(1<<30);
    for(i=1;i<=n;i++)
    {
        f>>best[i];
        tt[i]=i;
        parent[i]=0;
    }
    for(i=1;i<=n-1;i++)
    {
        f>>a>>b;
        tt[b]=a;
        parent[a]=1;
    }
    for(i=1;i<=n;i++)
    {
      if(!parent[i]) {q.push(i);}
    }
    while(!q.empty())
    {
        x=q.front();

        q.pop();
        if(x!=tt[x])
        {
            if(best[x]>0) best[tt[x]]+=best[x];
            if(!inq[tt[x]])
            {q.push(tt[x]);
            inq[tt[x]]=1;}
        }
    }
    for(i=1;i<=n;i++) if(best[i]>mx) mx=best[i];
    g<<mx;
    return 0;
}