답안 #965021

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
965021 2024-04-18T03:12:35 Z Pannda 자매 도시 (APIO20_swap) C++17
17 / 100
2000 ms 524288 KB
#include "swap.h"

#include <bits/stdc++.h>
using namespace std;

struct DSU {
    vector<int> f;
    vector<int> siz;
    vector<int> deg;
    vector<int> ok;
    vector<vector<pair<int*, int>>> stk;

    DSU(int n) : f(n), siz(n, 1), deg(n, 0), ok(n, false) { iota(f.begin(), f.end(), 0); }

    int leader(int u) {
        while (u != f[u]) u = f[u];
        return u;
    }

    bool unionize(int u0, int v0) {
        stk.emplace_back();
        int u = leader(u0);
        int v = leader(v0);
        if (u == v) {
            stk.back().push_back({&ok[u], ok[u]}); ok[u] = true;
            return false;
        }
        if (siz[u] > siz[v]) swap(u, v);
        stk.back().push_back({&siz[v], siz[v]}); siz[v] += siz[u];
        stk.back().push_back({&deg[u0], deg[u0]}); deg[u0]++;
        stk.back().push_back({&deg[v0], deg[v0]}); deg[v0]++;
        stk.back().push_back({&ok[v], ok[v]}); if (deg[u0] >= 3 || deg[v0] >= 3) ok[v] = true; ok[v] = ok[v] | ok[u];
        stk.back().push_back({&f[u], f[u]}); f[u] = v;
        return true;
    }

    bool same(int u, int v) {
        return leader(u) == leader(v);
    }

    bool isOk(int u) {
        return ok[leader(u)];
    }

    void rollback() {
        for (auto [ptr, val] : stk.back()) {
            *ptr = val;
        }
        stk.pop_back();
    }
};
int n, m;
vector<array<int, 3>> edges;
const int B = 2000;
vector<DSU> dsus;
int b;

void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) {
    n = N;
    m = M;
    edges.resize(m);
    for (int i = 0; i < m; i++) {
        edges[i] = {U[i], V[i], W[i]};
    }
    sort(edges.begin(), edges.end(), [&](array<int, 3> e0, array<int, 3> e1) { return e0[2] < e1[2]; });

    dsus.emplace_back(n);
    for (b = 0; B * b < m; b++) {
        dsus.push_back(dsus.back());
        for (int i = B * b; i < min(m, B * b + B); i++) {
            dsus.back().unionize(edges[i][0], edges[i][1]);
        }
    }
    b++;
}

int getMinimumFuelCapacity(int X, int Y) {
    if (!dsus.back().same(X, Y) || !dsus.back().isOk(X)) return -1;
    for (int b0 = 0; ; b0++) {
        if (dsus[b0 + 1].same(X, Y) && dsus[b0 + 1].isOk(X)) {
            int cnt = 0;
            int res;
            for (int i = B * b0; ; i++) {
                dsus[b0].unionize(edges[i][0], edges[i][1]);
                cnt++;
                if (dsus[b0].same(X, Y) && dsus[b0].isOk(X)) {
                    res = edges[i][2];
                    break;
                }
            }
            while (cnt--) dsus[b0].rollback();
            return res;
        }
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 436 KB Output is correct
4 Correct 1 ms 344 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 239 ms 259648 KB Output is correct
10 Correct 352 ms 393532 KB Output is correct
11 Correct 334 ms 376892 KB Output is correct
12 Correct 353 ms 407492 KB Output is correct
13 Correct 338 ms 408632 KB Output is correct
14 Correct 242 ms 262548 KB Output is correct
15 Correct 394 ms 396012 KB Output is correct
16 Correct 405 ms 378768 KB Output is correct
17 Correct 462 ms 412792 KB Output is correct
18 Correct 387 ms 415156 KB Output is correct
19 Execution timed out 2055 ms 16216 KB Time limit exceeded
20 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Execution timed out 2041 ms 374836 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 436 KB Output is correct
4 Correct 1 ms 344 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 0 ms 344 KB Output is correct
10 Correct 1 ms 604 KB Output is correct
11 Correct 2 ms 600 KB Output is correct
12 Correct 2 ms 600 KB Output is correct
13 Correct 1 ms 696 KB Output is correct
14 Correct 2 ms 600 KB Output is correct
15 Correct 2 ms 604 KB Output is correct
16 Correct 1 ms 604 KB Output is correct
17 Correct 2 ms 708 KB Output is correct
18 Correct 2 ms 600 KB Output is correct
19 Correct 1 ms 604 KB Output is correct
20 Correct 2 ms 604 KB Output is correct
21 Correct 2 ms 604 KB Output is correct
22 Correct 1 ms 600 KB Output is correct
23 Correct 1 ms 604 KB Output is correct
24 Correct 2 ms 860 KB Output is correct
25 Correct 2 ms 860 KB Output is correct
26 Correct 2 ms 860 KB Output is correct
27 Correct 1 ms 604 KB Output is correct
28 Correct 2 ms 856 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 436 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 239 ms 259648 KB Output is correct
11 Correct 352 ms 393532 KB Output is correct
12 Correct 334 ms 376892 KB Output is correct
13 Correct 353 ms 407492 KB Output is correct
14 Correct 338 ms 408632 KB Output is correct
15 Correct 1 ms 604 KB Output is correct
16 Correct 2 ms 600 KB Output is correct
17 Correct 2 ms 600 KB Output is correct
18 Correct 1 ms 696 KB Output is correct
19 Correct 2 ms 600 KB Output is correct
20 Correct 2 ms 604 KB Output is correct
21 Correct 1 ms 604 KB Output is correct
22 Correct 2 ms 708 KB Output is correct
23 Correct 2 ms 600 KB Output is correct
24 Correct 1 ms 604 KB Output is correct
25 Correct 2 ms 604 KB Output is correct
26 Correct 2 ms 604 KB Output is correct
27 Correct 1 ms 600 KB Output is correct
28 Correct 1 ms 604 KB Output is correct
29 Correct 2 ms 860 KB Output is correct
30 Correct 2 ms 860 KB Output is correct
31 Correct 2 ms 860 KB Output is correct
32 Correct 1 ms 604 KB Output is correct
33 Correct 2 ms 856 KB Output is correct
34 Correct 13 ms 9960 KB Output is correct
35 Correct 325 ms 409620 KB Output is correct
36 Correct 336 ms 408804 KB Output is correct
37 Correct 318 ms 409848 KB Output is correct
38 Correct 323 ms 409808 KB Output is correct
39 Correct 314 ms 408728 KB Output is correct
40 Correct 279 ms 330876 KB Output is correct
41 Correct 334 ms 407184 KB Output is correct
42 Correct 341 ms 409868 KB Output is correct
43 Correct 345 ms 408992 KB Output is correct
44 Correct 338 ms 407940 KB Output is correct
45 Runtime error 412 ms 524288 KB Execution killed with signal 9
46 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 436 KB Output is correct
4 Correct 1 ms 344 KB Output is correct
5 Correct 1 ms 604 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 239 ms 259648 KB Output is correct
10 Correct 352 ms 393532 KB Output is correct
11 Correct 334 ms 376892 KB Output is correct
12 Correct 353 ms 407492 KB Output is correct
13 Correct 338 ms 408632 KB Output is correct
14 Correct 242 ms 262548 KB Output is correct
15 Correct 394 ms 396012 KB Output is correct
16 Correct 405 ms 378768 KB Output is correct
17 Correct 462 ms 412792 KB Output is correct
18 Correct 387 ms 415156 KB Output is correct
19 Execution timed out 2041 ms 374836 KB Time limit exceeded
20 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 Correct 1 ms 348 KB Output is correct
4 Correct 1 ms 436 KB Output is correct
5 Correct 1 ms 344 KB Output is correct
6 Correct 1 ms 604 KB Output is correct
7 Correct 1 ms 604 KB Output is correct
8 Correct 1 ms 604 KB Output is correct
9 Correct 1 ms 604 KB Output is correct
10 Correct 239 ms 259648 KB Output is correct
11 Correct 352 ms 393532 KB Output is correct
12 Correct 334 ms 376892 KB Output is correct
13 Correct 353 ms 407492 KB Output is correct
14 Correct 338 ms 408632 KB Output is correct
15 Correct 242 ms 262548 KB Output is correct
16 Correct 394 ms 396012 KB Output is correct
17 Correct 405 ms 378768 KB Output is correct
18 Correct 462 ms 412792 KB Output is correct
19 Correct 387 ms 415156 KB Output is correct
20 Execution timed out 2041 ms 374836 KB Time limit exceeded
21 Halted 0 ms 0 KB -