Submission #1189970

#TimeUsernameProblemLanguageResultExecution timeMemory
1189970anmattroiJobs (BOI24_jobs)C++17
14 / 100
2096 ms24840 KiB
#include <bits/stdc++.h> #define maxn 300005 #define fi first #define se second using namespace std; using ii = pair<int, int>; int n, root; int c[maxn]; int64_t s[maxn], T, mint[maxn]; ii edges[maxn]; int cl[maxn], par[maxn]; vector<int> adj[maxn]; void pfs(int u) { if (cl[u]) { s[u] = 0; mint[u] = LLONG_MAX; } else { mint[u] = min(mint[u], s[u] += c[u]); } for (int v : adj[u]) { s[v] = s[u]; mint[v] = mint[u]; pfs(v); } } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> T; int64_t old = T; for (int i = 1; i <= n; i++) { cin >> c[i] >> par[i]; adj[par[i]].emplace_back(i); } par[0] = -1; for (int _ = 0; _ <= n; _++) { s[0] = 0; mint[0] = LLONG_MAX; pfs(0); int p = -1; int64_t mx = LLONG_MIN; for (int i = 0; i <= n; i++) { if (!cl[i] && s[i] >= 0 && -mint[i] <= T && mx < s[i]) { mx = s[i]; p = i; } } if (p == -1) break; T += s[p]; while (p != -1) { cl[p] = 1; p = par[p]; } } cout << T - old; } /* 6 1 3 0 -3 1 -5 0 2 1 6 3 -4 5 6 */
#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...