Submission #251359

#TimeUsernameProblemLanguageResultExecution timeMemory
251359cjoaJob Scheduling (IOI19_job)C++14
24 / 100
189 ms19812 KiB
#include "job.h"

#include <vector>
#include <algorithm>
#include <iostream>
#include <queue>

using namespace std;

typedef vector<int> VI;
typedef vector<VI> VVI;
typedef long long llong;

struct Temple {
   int id;
   llong days, cost;
   bool operator<(const Temple& t) const {
      return days * t.cost > t.days * cost;
   }
};

long long scheduling_cost(vector<int> p, vector<int> u, vector<int> d) {
   int N = p.size();
   VVI tree(N);

   for (int i = 1; i < N; ++i)
      tree[ p[i] ].push_back(i);

   llong T = 0;
   llong res = 0;

   priority_queue<Temple> pq;
   pq.push({0, d[0], u[0]});
   while (!pq.empty()) {
      Temple t = pq.top();
      pq.pop();
      T += d[t.id];
      res += T * u[t.id];
      for (int y : tree[t.id]) {
         pq.push({y, d[y], u[y]});
      }
   }

   return res;
}
#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...