제출 #1214317

#제출 시각아이디문제언어결과실행 시간메모리
1214317stefanneaguJobs (BOI24_jobs)C++20
0 / 100
1020 ms116144 KiB
#include <bits/stdc++.h> #define int long long using namespace std; const int nmax = 3e5 + 1; multiset<pair<int, int>> con[nmax]; vector<int> adj[nmax]; int v[nmax]; void dfs(int i) { for (auto it : adj[i]) { dfs(it); cout << it << '\n'; for (auto l : con[it]) { cout << l.first << " " << l.second << '\n'; } cout << '\n'; if (con[it].size() > con[i].size()) { swap(con[i], con[it]); } for (auto it : con[it]) { con[i].insert(it); } con[it].clear(); } pair<int, int> tp = {max(0ll, -v[i]), v[i]}; vector<pair<int, int>> des; for (auto it : con[i]) { if (tp.second <= 0) { tp = {max(tp.first, it.first - tp.second), tp.second + it.second}; des.push_back(it); } else if (tp.first > it.first) { tp.second += it.second; des.push_back(it); } else { break; } } for (auto it : des) { con[i].erase(con[i].lower_bound(it)); } if (tp.second <= 0) { return; } con[i].insert(tp); } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, s; cin >> n >> s; for (int i = 1; i <= n; i++) { int tata; cin >> v[i] >> tata; adj[tata].push_back(i); } dfs(0); int xtra = 0; cout << "0\n"; for (auto it : con[0]) { if (s + xtra >= it.first) { xtra += it.second; } cout << it.first << " " << it.second << '\n'; } cout << xtra; 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...