Submission #318933

#TimeUsernameProblemLanguageResultExecution timeMemory
318933alextodoranJob Scheduling (IOI19_job)C++17
Compilation error
0 ms0 KiB
/** ____ ____ ____ ____ ____ ||a |||t |||o |||d |||o || ||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\| **/ #include <bits/stdc++.h> //#include "job.h" using namespace std; typedef long long ll; const int N_MAX = 200002; int n; struct Cost { int d, u; }; Cost cost[N_MAX]; int parent[N_MAX]; vector <int> sons[N_MAX]; bool operator < (const Cost &a, const Cost &b) { return a.d * b.u < b.d * a.u; } struct Node { int u; Cost c; }; bool operator < (const Node &u, const Node &v) { return make_pair(u.c, u.u) > make_pair(v.c, v.u); } set <Node> notJoined[N_MAX]; void mergeSets (set <Node>* in, set <Node>* from) { bool swapped = false; if(in->size() < from->size()) { swap(in, from); swapped = true; } while(from->empty() == false) { in->insert(*from->begin()); from->erase(from->begin()); } if(swapped == true) swap(in, from); } bool isRoot[N_MAX]; void dfs (int u) { for(int v : sons[u]) { dfs(v); notJoined[u].insert(Node{v, cost[v]}); } isRoot[u] = true; while(notJoined[u].empty() == false) { int v = notJoined[u].begin()->u; if(!(cost[v] < cost[u])) break; notJoined[u].erase(notJoined[u].begin()); isRoot[v] = false; cost[u].d += cost[v].d; cost[u].u += cost[v].u; mergeSets(&notJoined[u], &notJoined[v]); } } int order[N_MAX]; int curr; bool seen[N_MAX]; void solveOne (int u) { seen[u] = true; order[++curr] = u; vector <pair <Cost, int> > aux; for(int v : sons[u]) if(isRoot[v] == false) aux.push_back(make_pair(cost[v], v)); sort(aux.begin(), aux.end()); for(pair <Cost, int> p : aux) solveOne(p.second); } void solveAll (int u) { solveOne(u); vector <int> aux; while(notJoined[u].empty() == false) { int v = notJoined[u].begin()->u; notJoined[u].erase(notJoined[u].begin()); aux.push_back(v); } reverse(aux.begin(), aux.end()); for(int v : aux) solveAll(v); } ll scheduling_cost (vector <int> p, vector <int> u, vector <int> d) { n = p.size(); for(int i = 1; i <= n; i++) { parent[i] = p[i - 1] + 1; cost[i] = Cost{d[i - 1], u[i - 1]}; } for(int i = 2; i <= n; i++) sons[parent[i]].push_back(i); dfs(1); solveAll(1); int currTime = 0; ll ans = 0; for(int i = 1; i <= n; i++) { assert(seen[i] == true); int j = order[i]; currTime += d[j - 1]; ans += 1LL * currTime * u[j - 1]; } return ans; } int main() { int n; cin >> n; vector <int> p(n), u(n), d(n); for(int i = 0; i < n; i++) cin >> p[i]; for(int i = 0; i < n; i++) cin >> u[i]; for(int i = 0; i < n; i++) cin >> d[i]; cout << scheduling_cost(p, u, d) << "\n"; return 0; }

Compilation message (stderr)

/tmp/cc7CDTPT.o: In function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'
/tmp/cc3sNREX.o:job.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status