Submission #313676

#TimeUsernameProblemLanguageResultExecution timeMemory
313676MiricaMateiJob Scheduling (IOI19_job)C++14
24 / 100
174 ms12644 KiB
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 200005;

bool vis[MAXN];

struct Obj {
  long long i, u, d;
  bool operator <(const Obj& other) const {
    bool ans;
    if (u == 0) {
      ans = 0;
    } else {
      if (other.u == 0) {
        ans = 1;
      } else {
        if (1LL * d * other.u < 1LL * other.d * u)
          ans = 1;
        else
          ans = 0;
      }
    }
    return !ans;
  }
};

long long scheduling_cost(vector<int>p, vector<int>u, vector<int>d) {
  int n = p.size();
  priority_queue<Obj>pq;
  for (int i = 1; i < n; ++i)
    pq.push({i, u[i], d[i]});
  vector<int>v;
  v.push_back(0);
  vis[0] = 1;
  while (!pq.empty()) {
    Obj aux = pq.top();
    pq.pop();
    vector<int>a;
    int x = aux.i;
    while (!vis[x]) {
      a.push_back(x);
      vis[x] = 1;
      x = p[x];
    }
    reverse(a.begin(), a.end());
    for (auto it:a)
      v.push_back(it);
  }
  long long ans = 0;
  long long t = 0;
  for (auto it:v) {
    t += d[it];
    ans += t * u[it];
  }
  return ans;
}

/*int main() {
  freopen("date.in", "r", stdin);
  freopen("date.out", "w", stdout);

  int n;
  scanf("%d", &n);
  vector<int>p(n), u(n), d(n);
  for (int i = 0; i < n; ++i)
    scanf("%d", &p[i]);
  for (int i = 0; i < n; ++i)
    scanf("%d", &u[i]);
  for (int i = 0; i < n; ++i)
    scanf("%d", &d[i]);

  printf("%lld\n", scheduling_cost(p, u, d));

  return 0;
}*/
#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...