Submission #434490

#TimeUsernameProblemLanguageResultExecution timeMemory
434490egekabasJob Scheduling (IOI19_job)C++14
12 / 100
318 ms37944 KiB
#include "job.h" #include <bits/stdc++.h> #define ff first #define ss second #define mp make_pair #define pb push_back #define all(x) (x).begin(), (x).end() using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll, ll> pii; typedef pair<ll, ll> pll; vector<vector<ll>> g; void calcval(int v, int curc, int curt, vector<int> &c, vector<int> &t, vector<ld> &val){ curc += c[v]; curt += t[v]; val[v] = ld(curt)/ld(curc); for(auto u : g[v]){ calcval(u, curc, curt, c, t, val); val[v] = min(val[v], val[u]); } } long long scheduling_cost(std::vector<int> p, std::vector<int> u, std::vector<int> d) { ll n = p.size(); g = vector<vector<ll>>(n); set<pair<ld, ll>> s; for(ll i = 0; i < n; ++i){ if(p[i] == -1) s.insert({0, i}); else g[p[i]].pb(i); } vector<ld> val(n); calcval(s.begin()->ss, 0, 0, u, d, val); ll ans = 0; ll curt = 0; while(s.size()){ ll v = s.begin()->ss; s.erase(s.begin()); curt += d[v]; ans += curt*u[v]; for(auto nxt : g[v]) s.insert({val[nxt] , nxt}); } return ans; }
#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...