답안 #866436

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
866436 2023-10-26T07:22:46 Z SorahISA Job Scheduling (IOI19_job) C++17
19 / 100
521 ms 262144 KB
#include "job.h"
#include <bits/stdc++.h>
using namespace std;

using int64 = long long;

struct Job {
    int64 u, d, id;
    Job(int _u, int _d, int _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<vector<int>> ch(N);
    for (int i = 1; i < N; ++i) ch[p[i]].emplace_back(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]] * d[job.id];
            int new_u = u[p[job.id]] + u[job.id];
            int new_d = d[p[job.id]] + d[job.id];
            
            // if (ch[p[job.id]].size() <= ch[job.id].size()) {
            //     u[job.id] = new_u, d[job.id] = new_d;
            //     for (int x : ch[p[job.id]]) {if (x != job.id) ch[job.id].emplace_back(x), p[x] = job.id;}
            //     ch[p[job.id]].clear();
            //     if (p[p[job.id]] != -1) ch[p[p[job.id]]].emplace_back(job.id);
            //     p[job.id] = p[p[job.id]];
            //     jobs.emplace(u[job.id], d[job.id], job.id);
            // }
            // else {
                u[p[job.id]] = new_u, d[p[job.id]] = new_d;
                for (int x : ch[job.id]) ch[p[job.id]].emplace_back(x), p[x] = p[job.id];
                ch[job.id].clear();
                jobs.emplace(u[p[job.id]], d[p[job.id]], p[job.id]);
            // }
        }
    }
    
    return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Correct 0 ms 348 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 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 125 ms 24764 KB Output is correct
5 Correct 141 ms 24872 KB Output is correct
6 Correct 121 ms 24804 KB Output is correct
7 Correct 118 ms 24776 KB Output is correct
8 Correct 117 ms 24772 KB Output is correct
9 Correct 121 ms 24744 KB Output is correct
10 Correct 132 ms 24876 KB Output is correct
11 Correct 122 ms 24716 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 348 KB Output is correct
5 Correct 4 ms 1644 KB Output is correct
6 Correct 129 ms 25292 KB Output is correct
7 Correct 125 ms 25208 KB Output is correct
8 Correct 116 ms 25288 KB Output is correct
9 Correct 131 ms 25300 KB Output is correct
10 Correct 1 ms 348 KB Output is correct
11 Correct 1 ms 604 KB Output is correct
12 Correct 4 ms 1372 KB Output is correct
13 Correct 4 ms 1628 KB Output is correct
14 Correct 122 ms 25284 KB Output is correct
15 Correct 128 ms 25372 KB Output is correct
16 Correct 126 ms 25288 KB Output is correct
17 Correct 127 ms 25424 KB Output is correct
18 Correct 123 ms 25396 KB Output is correct
19 Correct 136 ms 25280 KB Output is correct
20 Correct 112 ms 25284 KB Output is correct
21 Correct 115 ms 25408 KB Output is correct
22 Correct 115 ms 25268 KB Output is correct
23 Correct 138 ms 25284 KB Output is correct
24 Correct 122 ms 25404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 348 KB Output is correct
2 Runtime error 521 ms 262144 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Incorrect 1 ms 348 KB Output isn't correct
4 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 Incorrect 1 ms 348 KB Output isn't correct
4 Halted 0 ms 0 KB -