Submission #866442

# Submission time Handle Problem Language Result Execution time Memory
866442 2023-10-26T07:42:18 Z SorahISA Job Scheduling (IOI19_job) C++17
19 / 100
577 ms 36692 KB
#include "job.h"
#include <bits/stdc++.h>
using namespace std;

using int64 = long long;

struct Job {
    int64 u, d, id;
    Job(int64 _u, int64 _d, int64 _id) : u(_u), d(_d), id(_id) {}
    bool operator < (const Job &rhs) const {
        return d * rhs.u < rhs.d * u;
    }
};

int64 scheduling_cost(vector<int> p, vector<int> u, vector<int> d) {
    int N = p.size();
    vector<set<int>> ch(N);
    for (int i = 1; i < N; ++i) ch[p[i]].emplace(i);
    
    multiset<Job> jobs;
    for (int i = 0; i < N; ++i) jobs.emplace(u[i], d[i], i);
    
    int64 tim = 0, ans = 0;
    while (jobs.size()) {
        
        Job job = *begin(jobs);
        jobs.erase(begin(jobs));
        
        // cerr << "(" << job.u << ", " << job.d << ", " << job.id << ")\n";
        if (u[job.id] != job.u or d[job.id] != job.d) continue;
        // cerr << "(" << job.u << ", " << job.d << ", " << job.id << ")\n";
        
        if (p[job.id] == -1) {
            ans += job.u * (tim += job.d);
            for (int x : ch[job.id]) p[x] = -1;
        }
        else {
            ans -= u[p[job.id]] * job.d;
            int64 new_u = u[p[job.id]] + job.u;
            int64 new_d = d[p[job.id]] + job.d;
            
            if (ch[p[job.id]].size() <= ch[job.id].size()) {
                ch[p[job.id]].erase(job.id);
                if (p[p[job.id]] != -1) ch[p[p[job.id]]].erase(p[job.id]), ch[p[p[job.id]]].emplace(job.id);
                for (int x : ch[p[job.id]]) ch[job.id].emplace(x), p[x] = job.id;
                ch[p[job.id]].clear();
                p[job.id] = p[p[job.id]];
                jobs.emplace(u[job.id] = new_u, d[job.id] = new_d, job.id);
            }
            else {
                for (int x : ch[job.id]) ch[p[job.id]].emplace(x), p[x] = p[job.id];
                ch[job.id].clear();
                jobs.emplace(u[p[job.id]] = new_u, d[p[job.id]] = new_d, p[job.id]);
            }
        }
    }
    
    return ans;
}
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 344 KB Output is correct
4 Correct 165 ms 36184 KB Output is correct
5 Correct 197 ms 36316 KB Output is correct
6 Correct 166 ms 36372 KB Output is correct
7 Correct 164 ms 36684 KB Output is correct
8 Correct 157 ms 36304 KB Output is correct
9 Correct 163 ms 36432 KB Output is correct
10 Correct 159 ms 36228 KB Output is correct
11 Correct 170 ms 36692 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 600 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 1 ms 600 KB Output is correct
5 Correct 6 ms 2140 KB Output is correct
6 Correct 165 ms 36196 KB Output is correct
7 Correct 158 ms 36432 KB Output is correct
8 Correct 162 ms 36180 KB Output is correct
9 Correct 154 ms 36368 KB Output is correct
10 Correct 1 ms 344 KB Output is correct
11 Correct 1 ms 604 KB Output is correct
12 Correct 5 ms 1884 KB Output is correct
13 Correct 6 ms 2140 KB Output is correct
14 Correct 180 ms 36472 KB Output is correct
15 Correct 160 ms 36380 KB Output is correct
16 Correct 155 ms 36180 KB Output is correct
17 Correct 165 ms 36408 KB Output is correct
18 Correct 158 ms 36432 KB Output is correct
19 Correct 159 ms 36228 KB Output is correct
20 Correct 165 ms 36432 KB Output is correct
21 Correct 168 ms 36692 KB Output is correct
22 Correct 167 ms 36364 KB Output is correct
23 Correct 161 ms 36324 KB Output is correct
24 Correct 161 ms 36304 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 577 ms 36444 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 0 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -