Submission #210870

#TimeUsernameProblemLanguageResultExecution timeMemory
210870HNO2Job Scheduling (IOI19_job)C++17
24 / 100
300 ms36560 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=2e5+7; const int inf=INT_MAX; const ll inff=1e18; const ll mod=1e9+7; #define pii pair<int,int> #define mkp make_pair #define F first #define S second #define pb push_back #define sz(v) ((int)(v).size()) #define all(v) (v).begin(),(v).end() //#define int ll #ifdef HNO2 #define IOS #else #include <job.h> #define endl '\n' #define IOS ios::sync_with_stdio(0); cin.tie(0); #endif // HNO2 vector<int> G[maxn]; ll cost[maxn],t[maxn]; ll summ[maxn]; void dfs(int now,int p) { summ[now]+=cost[now]; for (int i:G[now]) if (i!=p) dfs(i,now),summ[now]+=summ[i]; } struct frac { int x,y,id; frac():x(0),y(0),id(0){} frac(int _x,int _y,int _id):x(_x),y(_y),id(_id){} bool operator<(const frac &rhs)const { return x*1ll*rhs.y<y*1ll*rhs.x; } bool operator>(const frac &rhs)const { return x*1ll*rhs.y>y*1ll*rhs.x; } }; long long scheduling_cost(std::vector<int> P, std::vector<int> U, std::vector<int> D) { int n=sz(P); for (int i=1;i<n;i++) G[P[i]+1].pb(i+1); for (int i=1;i<=n;i++) t[i]=D[i-1],cost[i]=U[i-1]; dfs(1,-1); priority_queue<frac> pq; pq.push(frac(summ[1],t[1],1)); ll sum=0,ret=0; while (!pq.empty()) { frac now=pq.top(); pq.pop(); sum+=t[now.id]; ret+=cost[now.id]*sum; for (int i:G[now.id]) pq.push(frac(summ[i],t[i],i)); } return ret; }
#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...