제출 #1351068

#제출 시각아이디문제언어결과실행 시간메모리
1351068Adeeb_obedoJobs (BOI24_jobs)C++20
0 / 100
163 ms64912 KiB
#include<bits/stdc++.h>
#define int long long
#define ll long long
#define ld   long double
#define _1 first
#define _2 second
#define yes cout<<"Yes\n"
#define nah cout<<"No\n"
#define FFF ios_base::sync_with_stdio(0);cin.tie(0);
#define ipr pair<int,int>
#define ret return
#define intt int32_t
#define mid ((l+r)/2)
#define pb push_back
#define lll __int128
using namespace std;
int tst, ts;
intt mo = 0*(998244353)+(1e9+7)*1, dx[] = {0, -1, -1, 0}, dy[] = {1, 1, 2, 0};
int mul( int x, int y ) {
    x%=mo;y%=mo;
    ret (int) ( (ll) x * y  % mo);
    ret x*y;
}
int pwo( int x, ll y ) {
    int res = 1;
    for( int i = 63; i + 1; i-- )
        res = mul( res, mul(res , ( ( 1ll << i )&y ? x : 1 )) );
    ret res;
}
int dvii( int x, int y ) {
    ret mul( x,  pwo(y,mo-2) );
}
int oo( char x , char y) {
    ret ( int )x - y;
}
int lgg( int x, int y ) {
    int u = 0;
    while( x ) {
        u++;
        x /= y;
    }
    ret u;
}//g++ -Wall -o "%e" "%f" && "./%e"
int mun( int x, int y ) {
    while( x < y )x += mo;
    ret ( x - y ) % mo;
}
int add( int x, int y ) {
    ret x + y - ( mo * ( x + y >= mo ) );
    ret x + y;
}
int lcm( int x, int y ) {
    if(x*y==0)ret max(x,y);
    int o=__gcd(x,y);
    x/=o;
    ret x*y;
}
#define endl '\n';
#define nl no*2
#define nr no*2+1
const int M =5e4+7, N = 5e5+7, P = 1e12, inf = 1e18+7 ;
int n,a[N],o,s;
vector<int>g[N];
set<ipr>bf[N];
void solve(){
    cin>>n>>s;o=s;
    for(int i=1;i<=n;i++){
        int p;
        cin>>a[i]>>p;
        g[p].pb(i);
        bf[p].insert({a[i],i});
    }
    set<ipr>st;
    st.insert({0,0});
    while(st.size()){
        ipr p=*st.rbegin();
        st.erase(p);
        if(p._1>=0){
            s+=p._1;
            for(auto j:bf[p._2])
                st.insert(j);
            bf[p._2].clear();
        }
        else if(p._1+s>0){
            int uu=0;
            while(bf[p._2].size()){
                ipr pr=*bf[p._2].rbegin();
                if(p._1>=0)break;
                if(s+p._1+pr._1>0){
                    p._1+=pr._1;uu=1;
                    for(auto j:bf[pr._2])
                        bf[p._2].insert(j);
                    bf[pr._2].clear();
                    bf[p._2].erase(pr);
                }
                else break;
            }
            if(p._1>=0){
                s+=p._1;
                for(auto j:bf[p._2])
                    st.insert(j);
                bf[p._2].clear();
            }
            else if(uu)
                st.insert(p);
        }
        else break;
    }
    cout<<s-o<<endl;
}
intt main() {
    FFF
    //freopen("7.in", "r", stdin);
    //freopen("out.txt", "w", stdout);
    tst = 1;
    //cin >> tst;
    for( ts = 1; ts <= tst; ts++ ){
        solve();
    }
}
#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...