Submission #707710

#TimeUsernameProblemLanguageResultExecution timeMemory
707710AdamGSJob Scheduling (IOI19_job)C++17
100 / 100
229 ms17880 KiB
//#include "job.h" #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define rep(a, b) for(int a = 0; a < (b); ++a) #define st first #define nd second #define pb push_back #define all(a) a.begin(), a.end() const int LIM=2e5+7; struct comp { bool operator()(pair<pair<ll,ll>,int>a, pair<pair<ll,ll>,int>b) { return a.st.st*b.st.nd>=a.st.nd*b.st.st; } }; priority_queue<pair<pair<ll,ll>,int>,vector<pair<pair<ll,ll>,int>>,comp>q; int F[LIM], odw[LIM], n; ll ans, aktt; pair<ll,ll>T[LIM]; int fnd(int x) { if(F[x]==x) return x; return F[x]=fnd(F[x]); } ll scheduling_cost(vector<int>P, vector<int>U, vector<int>D) { n=P.size(); rep(i, n) { T[i]={D[i], U[i]}; F[i]=i; q.push({T[i], i}); } while(!q.empty()) { pair<ll,ll>x=q.top().st; int p=q.top().nd; q.pop(); if(odw[p]) continue; odw[p]=1; if(P[p]==-1 || odw[fnd(P[p])]) { aktt+=x.st; ans+=aktt*x.nd; continue; } int a=fnd(P[p]); ans-=T[a].nd*T[p].st; T[a].st+=T[p].st; T[a].nd+=T[p].nd; F[p]=a; q.push({T[a], a}); } 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...