제출 #1323669

#제출 시각아이디문제언어결과실행 시간메모리
1323669huoiJobs (BOI24_jobs)C++17
29 / 100
234 ms215304 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define INF 1e18 void solve() { int n; cin >> n; vector<int> p(n + 1); cin >> p[0]; vector<int> roots; vector<queue<int>> a(n + 1); multiset<pair<int, int>> st; 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; } a[curroot].push(p[i]); } bool popped = true; while (popped) { popped = false; for (int root : roots) { if (a[root].empty()) continue; int req = 0, sum = 0; do { // cout << "popping " << a[root].front() << " from " << root << "\n"; popped = true; sum += a[root].front(); req = min(req, sum); a[root].pop(); } while (!a[root].empty() && sum <= 0); if (sum > 0) st.insert({-req, sum}); } } int ans = p[0]; for (auto [req, sum] : st) { // cout << req << " " << sum << "\n"; if (ans >= req) { ans += sum; } } cout << ans - p[0]; } 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...