제출 #802883

#제출 시각아이디문제언어결과실행 시간메모리
802883Ahmed57Job Scheduling (IOI19_job)C++17
100 / 100
167 ms29508 KiB
#include "job.h" #include <bits/stdc++.h> using namespace std; #define ll long long const int mxN=2e5; int n, nxt[mxN], ta[mxN]; vector<int> o; ll u2[mxN], d2[mxN]; struct cmp { bool operator()(const int &a, const int &b) { return d2[a]*u2[b]>d2[b]*u2[a]; } }; priority_queue<int, vector<int>, cmp> c[mxN]; void dfs(int u) { o.push_back(u); for(; c[u].size(); c[u].pop()) dfs(c[u].top()); } ll scheduling_cost(vector<int> p, vector<int> u, vector<int> d) { n=p.size(); memset(nxt, -1, 4*n); iota(ta, ta+n, 0); for(int i=n-1; ~i; --i) { u2[i]=u[i]; d2[i]=d[i]; while(c[i].size()) { int u=c[i].top(); if(cmp()(u, i)) break; c[i].pop(); nxt[ta[i]]=u; ta[i]=ta[u]; u2[i]+=u2[u]; d2[i]+=d2[u]; if(c[i].size()<c[u].size()) swap(c[i], c[u]); for(; c[u].size(); c[u].pop()) c[i].push(c[u].top()); } if(i) c[p[i]].push(i); } dfs(0); sort(o.begin(), o.end(), cmp()); ll t=0, ans=0; for(int i=o.size()-1; ~i; --i) { for(int j=o[i]; ~j; j=nxt[j]) { t+=d[j]; ans+=t*u[j]; } } 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...