제출 #1323645

#제출 시각아이디문제언어결과실행 시간메모리
1323645huoiJobs (BOI24_jobs)C++17
0 / 100
136 ms207140 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define INF 1e18

int n;
vector<int> p;
vector<vector<int>> adj;

void solve() {
    int n;
    cin >> n;

    p.resize(n + 1);

    vector<int> roots;
    vector<queue<int>> stk(n + 1);
    multiset<pair<int, int>> st;

    cin >> p[0];

    int curroot = 0;
    for (int i = 1; i <= n; i++) {
        int dep; cin >> p[i] >> dep;
        if (dep == 0) {
            roots.push_back(i);
            curroot = i;
        }
        stk[curroot].push(p[i]);
    }

    bool popped = true;
    while (popped) {
        popped = false;
        for (int root : roots) {
            if (stk[root].empty()) continue;
            int req = 0, sum = 0;
            do {
                sum += stk[root].front();
                req = min(req, sum);
                stk[root].pop();
                popped = true;
            } while (!stk[root].empty() && sum <= 0);
            st.insert({-req, sum});
        }
    }

    int ans = 0;
    for (auto [a, b] : st) {
        ans += b;
    }
    cout << ans;
}

int32_t main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    return 0;
}
#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...