Submission #802901

#TimeUsernameProblemLanguageResultExecution timeMemory
802901Ahmed57Job Scheduling (IOI19_job)C++17
42 / 100
163 ms31512 KiB
#include<bits/stdc++.h> using namespace std; long long D[200001],U[200001]; bool comp(int a,int b){ return (D[a]*U[b])<(D[b]*U[a]); } struct cmp { bool operator()(const int &a, const int &b) { return (D[a]*U[b])>(D[b]*U[a]); } }; priority_queue<int,vector<int>,cmp> adj[200001]; vector<int> ans; void dfs(int u) { ans.push_back(u); for(;adj[u].size();adj[u].pop())dfs(adj[u].top()); } long long scheduling_cost(vector<int> p,vector<int> u,vector<int> d){ int n = p.size(); long long nxt[n],nick_name[n]; U[0] = u[0] , D[0] = d[0]; nxt[0] = -1;nick_name[0] = 0; for(int i = 1;i<n;i++){ nick_name[i] = i; nxt[i] = -1; U[i] = u[i]; D[i] = d[i]; adj[p[i]].push(i); } for(int i = n-1;i>=0;i--){ while(adj[i].size()){ int x = adj[i].top(); if(cmp()(adj[i].top(),i)){ break; } adj[i].pop(); nxt[nick_name[i]] = x; nick_name[i] = nick_name[x]; D[i]+=D[x]; U[i]+=U[x]; if(adj[i].size()<adj[x].size())swap(adj[i],adj[x]); while(adj[x].size()){ adj[i].push(adj[x].top());adj[x].pop(); } } } dfs(0); sort(ans.begin(),ans.end(),cmp()); long long all = 0 , cur = 0; for(int i = ans.size()-1;i>=0;i--){ int lol = ans[i]; while(lol!=-1){ cur+=d[lol]; all+=cur*u[lol]; lol = nxt[lol]; } } return all; }/* int main(){ cout<<scheduling_cost({-1,0,0},{5,2,5},{3,4,1}); }*/
#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...