Cod sursa(job #2922647)

Utilizator bogikanagyNagy Boglarka bogikanagy Data 9 septembrie 2022 14:49:11
Problema Asmax Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>
#include <deque>

#define ll long long 

using namespace std;
ifstream cin ("asmax.in	");
ofstream cout ("asmax.out");

struct element
{
    ll value,father;
    ll dp;
    ll out;
};
vector <element> x;
ll n,m,a,i,j,b;
deque<ll> v;
void BFS()
{
    ll curr;
    while (!v.empty())
    {
        curr=v[0];
        v.pop_front();
        x[x[curr].father].out--;
        if (x[curr].dp>0) x[x[curr].father].dp+=x[curr].dp;
        
        if (x[x[curr].father].out==0) v.push_back(x[curr].father);
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);

    cin>>n;
    x.resize(n+1);
    for (i=1;i<=n;++i)
    {
        cin>>x[i].value;
        x[i].dp=x[i].value;
    }
    for (i=1;i<n;++i)
    {
        cin>>a>>b;
        x[b].father=a;
        x[a].out++;
    }

    for (i=1;i<=n;++i) if (x[i].out==0) v.push_back(i);
    BFS();

    ll maxi=-999999;
    for (i=1;i<=n;++i) 
    {
        //cout<<i<<": "<<x[i].dp<<"\n";
        if (x[i].dp>maxi) maxi=x[i].dp;
    }
    cout<<maxi<<"\n";
}