답안 #866441

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
866441 2023-10-26T07:39:00 Z SorahISA Job Scheduling (IOI19_job) C++17
19 / 100
610 ms 36556 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()) {
                for (int x : ch[p[job.id]]) {if (x != job.id) ch[job.id].emplace(x), p[x] = job.id;}
                ch[p[job.id]].clear();
                if (p[p[job.id]] != -1) ch[p[p[job.id]]].erase(p[job.id]), ch[p[p[job.id]]].emplace(job.id);
                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;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Correct 0 ms 348 KB Output is correct
4 Correct 176 ms 36300 KB Output is correct
5 Correct 157 ms 36328 KB Output is correct
6 Correct 161 ms 36308 KB Output is correct
7 Correct 161 ms 36436 KB Output is correct
8 Correct 159 ms 36444 KB Output is correct
9 Correct 159 ms 36440 KB Output is correct
10 Correct 165 ms 36508 KB Output is correct
11 Correct 176 ms 36316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 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 604 KB Output is correct
5 Correct 6 ms 2140 KB Output is correct
6 Correct 197 ms 36280 KB Output is correct
7 Correct 160 ms 36284 KB Output is correct
8 Correct 166 ms 36216 KB Output is correct
9 Correct 166 ms 36276 KB Output is correct
10 Correct 0 ms 348 KB Output is correct
11 Correct 1 ms 604 KB Output is correct
12 Correct 5 ms 1884 KB Output is correct
13 Correct 5 ms 2140 KB Output is correct
14 Correct 167 ms 36432 KB Output is correct
15 Correct 157 ms 36312 KB Output is correct
16 Correct 166 ms 36324 KB Output is correct
17 Correct 169 ms 36272 KB Output is correct
18 Correct 166 ms 36432 KB Output is correct
19 Correct 164 ms 36556 KB Output is correct
20 Correct 185 ms 36440 KB Output is correct
21 Correct 159 ms 36436 KB Output is correct
22 Correct 186 ms 36432 KB Output is correct
23 Correct 175 ms 36432 KB Output is correct
24 Correct 156 ms 36436 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Incorrect 610 ms 36440 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Incorrect 1 ms 348 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 344 KB Output isn't correct
2 Halted 0 ms 0 KB -