Submission #349603

#TimeUsernameProblemLanguageResultExecution timeMemory
349603thecodingwizardJob Scheduling (IOI19_job)C++17
12 / 100
133 ms47192 KiB
#include "job.h" #include <bits/stdc++.h> using namespace std; using ll = long long; #define pb push_back #define all(x) x.begin(), x.end() #define ii pair<int, int> #define f first #define s second #define mp make_pair ll ans = 0; vector<int> adj[200000]; vector<int> p, u, d; vector<pair<int, pair<ll,ll>>> indices; bool done[200000]; void dfs(int node, ll dist, ll sumU) { //ans += d[node]*dist; indices.pb(mp(node, mp(dist, sumU))); for (int v : adj[node]) { dfs(v, dist+d[v], sumU + u[v]); } } long long scheduling_cost(std::vector<int> _p, std::vector<int> _u, std::vector<int> _d) { p = _p, u = _u, d = _d; int n = p.size(); for (int i = 1; i < n; i++) { adj[p[i]].pb(i); } dfs(0, d[0], u[0]); ll curTime = 0; sort(all(indices), [](pair<int, pair<ll,ll>> x, pair<int, pair<ll,ll>> y) { return x.s.f*y.s.s<x.s.s*y.s.f; }); for (auto x : indices) { vector<int> todo; int node = x.f; while (node != -1 && !done[node]) { todo.pb(node); done[node] = true; node = p[node]; } reverse(all(todo)); for (auto node : todo) { curTime += d[node]; ans += curTime*u[node]; } } 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...