Submission #1193969

#TimeUsernameProblemLanguageResultExecution timeMemory
1193969chaeryeongJob Scheduling (IOI19_job)C++20
21 / 100
3104 ms239012 KiB
#include "job.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 2e5 + 25; vector <int> adj[MAXN]; ll u[MAXN], d[MAXN]; int n, FFFF; deque <int> dp[MAXN]; deque <int> merge (deque <int> x, deque <int> y) { ll aux[(int)x.size() + 1][(int)y.size() + 1] = {}; deque <ll> f((int)x.size() + 1, 0), g((int)y.size() + 1, 0); for (int i = (int)x.size() - 1; i >= 0; i--) { f[i] = f[i + 1] + u[x[i]]; } for (int i = (int)y.size() - 1; i >= 0; i--) { g[i] = g[i + 1] + u[y[i]]; } for (int i = (int)x.size() - 1; i >= 0; i--) { for (int j = (int)y.size() - 1; j >= 0; j--) { aux[i][j] = min(aux[i + 1][j] + d[x[i]] * g[j], aux[i][j + 1] + d[y[j]] * f[i]); } } deque <int> ret; int a = 0, b = 0; while (a < (int)x.size() && b < (int)y.size()) { if (aux[a][b] == aux[a + 1][b] + d[x[a]] * g[b]) { ret.push_back(x[a++]); } else { ret.push_back(y[b++]); } } while (a < (int)x.size() || b < (int)y.size()) { if (a < (int)x.size()) { ret.push_back(x[a++]); } else { ret.push_back(y[b++]); } } return ret; } void dfs (int pos) { for (auto j : adj[pos]) { dfs(j); if (dp[j].empty()) { swap(dp[pos], dp[j]); } else dp[pos] = merge(dp[pos], dp[j]); dp[j].clear(); } dp[pos].push_front(pos); } ll scheduling_cost(vector<int> p, vector<int> _U, vector<int> _D) { assert(!FFFF); FFFF = 1; n = (int)p.size(); for (int i = 0; i < n; i++) { u[i] = _U[i]; d[i] = _D[i]; if (p[i] != -1) { adj[p[i]].push_back(i); } } dfs(0); auto ans = dp[0]; ll sum = 0, ret = 0; for (auto i : ans) { sum += u[i]; } for (auto i : ans) { ret += sum * (ll)d[i]; sum -= u[i]; } return ret; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...