제출 #1125606

#제출 시각아이디문제언어결과실행 시간메모리
1125606tte0Jobs (BOI24_jobs)C++20
0 / 100
2097 ms29156 KiB
// Author: Teoman Ata Korkmaz
#include <bits/stdc++.h> 
#define int int_fast64_t
using namespace std;
constexpr int N=300005;
///////////////////////////////////////////////////////////
int n,k,x,p[N],c[N];
vector<tuple<int,int>> adj[N];
vector<vector<pair<int,int>>> v;

signed main(void){
    cin>>n>>k;
    const int K=k;
    for(int i=0;i<n;i++){
        cin>>c[i]>>p[i];p[i]--;
        if(p[i]!=-1)adj[p[i]].push_back({i,c[i]});
    }

    for(int i=0;i<n;i++){
        if(p[i]==-1)v.push_back({{0,c[i]}});
        else v.back().push_back({0,c[i]});
    }

    // for(auto _:v){
    //     cerr<<"v:";
    //     for(auto i:_)cerr<<"["<<i.first<<","<<i.second<<"],";
    //     cerr<<endl;
    // }
    // cerr<<endl;

    for(auto& v:v){
        vector<pair<int,int>> t;
        for(auto i:v){
            if(t.size() && t.back().second<0){
                t.back().second+=i.second;
            }
            else{
                t.push_back(i);
            }
            t.back().first=min(t.back().second,t.back().first);
        }
        v=t;
    }
    
    // for(auto _:v){
    //     cerr<<"v:";
    //     for(auto i:_)cerr<<"["<<i.first<<","<<i.second<<"],";
    //     cerr<<endl;
    // }
    // cerr<<endl;

    int ans=0;
    priority_queue<tuple<int,int,int,int>> q;
    for(int i=0;i<v.size();i++)q.push({v[i][0].first,v[i][0].second,i,0});
    while(q.size()){
        auto [x,y,i,j]=q.top();q.pop();
        if(y<0 || x>k)continue;
        k+=y;
        ans=max(ans,k-K);
        if(j+1<v[i].size())q.push({v[i][j+1].first,v[i][j+1].second,i,j});
    }

    cout<<ans<<endl;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...