Submission #997693

# Submission time Handle Problem Language Result Execution time Memory
997693 2024-06-12T17:25:33 Z salmon Jobs (BOI24_jobs) C++14
0 / 100
243 ms 85196 KB
#include <bits/stdc++.h>
using namespace std;

int N;
vector<int> root;
int h,h1;
vector<int> adjlst[300100];
long long int lst[300100];
int parent[300100];
const long long int inf = 2e18;
long long int money;
priority_queue<pair<long long int,long long int>,vector<pair<long long int,long long int>>,greater<pair<long long int,long long int>>> pq;

pair<set<pair<long long int,long long int>>*,long long int> dfs(int i){
//printf("%d",i);
    pair<int,int> ii = {-1,-1};
    vector<pair<set<pair<long long int,long long int>>*,long long int>> v;

    for(int j : adjlst[i]){
        v.push_back(dfs(j));

        ii = max({(int)(v.back().first -> size()),v.size() - 1},ii);
    }
//printf("%d",i);
    set<pair<long long int,long long int>>* sat;
    long long int offset = 0;
    long long int va = lst[i];
    long long int other = max(0LL,-lst[i]);

    if(ii.first == -1){
        sat = new set<pair<long long int,long long int>>();
        if(lst[i] > 0) sat -> insert({0,lst[i]});
    }
    else{
        sat = v[ii.second].first;
        offset = v[ii.second].second;
        if(lst[i] > 0) sat -> insert({- offset,lst[i]});
    }


    for(int i = 0; i < v.size(); i++){
        if(i == ii.second) continue;
        for(pair<long long int, long long int> pp : *(v[i].first) ){
            pp.first = pp.first + v[i].second - offset;
            sat -> insert(pp);
        }
    }

    //offset -= min(0LL,va);
    long long int num = 0;


    if(lst[i] < 0){
        long long int balls;

        num = -lst[i];
        while(num != 0 && !(sat -> empty())){
            auto it = sat -> begin();
            long long int temp = min(num, it -> second);
            num -= temp;
            balls = sat -> begin() -> first;
            if(it -> second == temp){
                sat -> erase(it);
            }
            else{
                pair<long long int, long long int> ii = *it;
                ii.second = ii.second - temp ;
                sat -> erase(it);
                sat -> insert(ii);
            }
        }

        if(num != 0) return {sat,0};

        other = balls + other;
    }





    while(sat -> lower_bound({-offset + other,inf}) != sat -> begin()){
        auto it = sat -> lower_bound({-offset + other,inf});
        advance(it,-1);
        num += it -> second;
        sat -> erase(it);
    }

    if(num != 0) sat -> insert({-offset + other, num});

    return {sat,offset};
}

int main(){
	scanf(" %d",&N);
    scanf(" %lld",&money);

    long long int init = money;

	for(int i = 1; i <= N; i++){
		scanf(" %d",&h);
		scanf(" %d",&h1);

		if(h1 == 0){
			root.push_back(i);
		}
		else{
            adjlst[h1].push_back(i);
		}
		lst[i] = h;
	}
	//printf("\n");

	for(int i : root){
        pair<set<pair<long long int,long long int>>*,long long int> ii = dfs(i);

        for(pair<long long int, long long int> pp : *(ii.first)){
            pp.first += ii.second;
            //printf("%d %d\n",pp.first,pp.second);
            pq.push(pp);
        }
	}

	while(!pq.empty()){
        if(money < pq.top().first) break;
        money += pq.top().second;
        pq.pop();
	}

	printf("%lld",money - init);
}
/*
5 104
-103 0
102 1
-103 2
55 3
50 3


*/

Compilation message

Main.cpp: In function 'std::pair<std::set<std::pair<long long int, long long int> >*, long long int> dfs(int)':
Main.cpp:41:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<std::set<std::pair<long long int, long long int> >*, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |     for(int i = 0; i < v.size(); i++){
      |                    ~~^~~~~~~~~~
Main.cpp:27:19: warning: unused variable 'va' [-Wunused-variable]
   27 |     long long int va = lst[i];
      |                   ^~
Main.cpp: In function 'int main()':
Main.cpp:95:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   95 |  scanf(" %d",&N);
      |  ~~~~~^~~~~~~~~~
Main.cpp:96:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   96 |     scanf(" %lld",&money);
      |     ~~~~~^~~~~~~~~~~~~~~~
Main.cpp:101:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  101 |   scanf(" %d",&h);
      |   ~~~~~^~~~~~~~~~
Main.cpp:102:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
  102 |   scanf(" %d",&h1);
      |   ~~~~~^~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 243 ms 85196 KB Output is correct
2 Correct 154 ms 53940 KB Output is correct
3 Correct 163 ms 37116 KB Output is correct
4 Correct 157 ms 51088 KB Output is correct
5 Correct 140 ms 63532 KB Output is correct
6 Incorrect 115 ms 44208 KB Output isn't correct
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 10588 KB Output is correct
2 Correct 2 ms 10588 KB Output is correct
3 Correct 2 ms 10588 KB Output is correct
4 Correct 2 ms 10840 KB Output is correct
5 Incorrect 2 ms 11100 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 10588 KB Output is correct
2 Correct 2 ms 10588 KB Output is correct
3 Correct 2 ms 10588 KB Output is correct
4 Correct 2 ms 10840 KB Output is correct
5 Incorrect 2 ms 11100 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 10588 KB Output is correct
2 Correct 2 ms 10588 KB Output is correct
3 Correct 2 ms 10588 KB Output is correct
4 Correct 2 ms 10840 KB Output is correct
5 Incorrect 2 ms 11100 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 243 ms 85196 KB Output is correct
2 Correct 154 ms 53940 KB Output is correct
3 Correct 163 ms 37116 KB Output is correct
4 Correct 157 ms 51088 KB Output is correct
5 Correct 140 ms 63532 KB Output is correct
6 Incorrect 115 ms 44208 KB Output isn't correct
7 Halted 0 ms 0 KB -