QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#523340#8809. Telephone Planslwm77080 0ms3848kbC++174.9kb2024-08-18 07:45:372024-08-18 07:45:37

Judging History

你现在查看的是最新测评结果

  • [2024-08-18 07:45:37]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:3848kb
  • [2024-08-18 07:45:37]
  • 提交

answer

#include <algorithm>
#include <cstdint>
#include <ios>
#include <iostream>
#include <numeric>
#include <set>
#include <utility>
#include <vector>

void solve() {

    bool e;
    std::int32_t n;
    std::int32_t q;

    std::cin >> e >> n >> q;

    std::vector<std::set<std::int32_t>> adj(n);
    std::vector<std::int32_t> comps(n);
    std::vector<std::set<std::int32_t>> grps(n);
    std::vector<std::int32_t> pars(n);
    std::vector<std::int64_t> pfxs(q + 1);
    std::int64_t prv = 0;
    std::int64_t tot_pairs = 0;

    std::iota(std::begin(comps), std::end(comps), 0);

    for (std::int32_t i = 0; i < n; ++i) {
        grps[i].insert(i);
    }

    for (std::int32_t i = 0; i < q; ++i) {
        pfxs[i + 1] = pfxs[i];
        std::int32_t tp = 0;
        std::cin >> tp;
        if (tp == 1) {
            std::int64_t x;
            std::int64_t y;
            std::cin >> x >> y;
            if (e) {
                x ^= prv;
                y ^= prv;
            }
            --x;
            --y;
            adj[x].insert(y);
            adj[y].insert(x);
            x = comps[x];
            y = comps[y];
            const std::int64_t sz_1 = std::size(grps[x]);
            const std::int64_t sz_2 = std::size(grps[y]);
            tot_pairs += sz_1 * sz_2;
            if (sz_1 < sz_2) {
                std::swap(x, y);
            }
            for (auto z : grps[y]) {
                comps[z] = x;
            }
            grps[x].merge(grps[y]);
        } else if (tp == 2) {
            std::int64_t x;
            std::int64_t y;
            std::cin >> x >> y;
            if (e) {
                x ^= prv;
                y ^= prv;
            }
            --x;
            --y;
            adj[x].erase(y);
            adj[y].erase(x);
            pars[x] = -1;
            pars[y] = -1;
            std::set<std::int32_t>& grp = grps[comps[x]];
            std::vector proc_1({std::int32_t(x)});
            std::vector proc_2({std::int32_t(y)});
            bool swp = false;
            std::int64_t sz_1 = 1;
            std::int64_t sz_2 = 1;
            if (!std::empty(adj[x]) && !std::empty(adj[y])) {
                using it_t = std::set<std::int32_t>::iterator;
                it_t it_1;
                it_t it_2;
                std::int32_t ptr_1 = -1;
                std::int32_t ptr_2 = -1;
                while (true) {
                    while (ptr_1 < sz_1) {
                        if (ptr_1 == -1 || it_1 == std::end(adj[proc_1[ptr_1]])) {
                            ++ptr_1;
                            if (ptr_1 < sz_1) {
                                it_1 = std::begin(adj[proc_1[ptr_1]]);
                            }
                            continue;
                        }
                        if (*it_1 != pars[proc_1[ptr_1]]) {
                            break;
                        }
                        ++it_1;
                    }
                    if (ptr_1 < sz_1) {
                        proc_1.push_back(*it_1);
                        pars[*it_1] = proc_1[ptr_1];
                        ++sz_1;
                    } else {
                        swp = true;
                        break;
                    }
                    while (ptr_2 < sz_2) {
                        if (ptr_2 == -1 || it_2 == std::end(adj[proc_2[ptr_2]])) {
                            ++ptr_2;
                            if (ptr_2 < sz_2) {
                                it_2 = std::begin(adj[proc_2[ptr_2]]);
                            }
                            continue;
                        }
                        if (*it_2 != pars[proc_2[ptr_2]]) {
                            break;
                        }
                        ++it_2;
                    }
                    if (ptr_2 < sz_2) {
                        proc_2.push_back(*it_2);
                        pars[*it_2] = proc_2[ptr_2];
                        ++sz_2;
                    } else {
                        break;
                    }
                }
            } else if (std::empty(adj[x])) {
                swp = true;
            }
            const std::int64_t sz = swp ? sz_1 : sz_2;
            pfxs[i + 1] += sz * (std::size(grp) - sz);
            if (swp) {
                std::swap(proc_1, proc_2);
            }
            for (auto z : proc_2) {
                grp.erase(z);
                comps[z] = std::size(grps);
            }
            grps.emplace_back(std::begin(proc_2), std::end(proc_2));
        } else {
            std::int64_t t;
            std::cin >> t;
            if (e) {
                t ^= prv;
            }
            prv = tot_pairs - pfxs[(i + 1) - t];
            std::cout << prv << '\n';
        }
    }

}

int main() {

    std::cin.tie(nullptr);

    std::ios_base::sync_with_stdio(false);

    solve();

    return 0;

}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

score: 3
Accepted
time: 0ms
memory: 3840kb

input:

0
1 147
3 0
3 0
3 1
3 1
3 0
3 5
3 5
3 1
3 1
3 4
3 8
3 2
3 10
3 13
3 10
3 8
3 8
3 0
3 16
3 3
3 1
3 20
3 2
3 10
3 16
3 13
3 17
3 12
3 22
3 7
3 8
3 2
3 12
3 32
3 12
3 31
3 2
3 0
3 21
3 24
3 28
3 32
3 9
3 18
3 26
3 11
3 45
3 35
3 14
3 34
3 49
3 31
3 43
3 11
3 21
3 50
3 4
3 11
3 31
3 51
3 28
3 26
3 18
3 ...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

result:

ok 147 lines

Test #2:

score: 3
Accepted
time: 0ms
memory: 3768kb

input:

0
2 10
1 1 2
3 1
3 1
3 2
3 3
3 3
3 3
2 1 2
3 2
3 3

output:

1
1
1
1
1
1
1
1

result:

ok 8 lines

Test #3:

score: 3
Accepted
time: 0ms
memory: 3848kb

input:

0
30 150
1 14 10
3 1
1 14 6
1 3 6
3 4
3 4
1 2 3
3 0
3 5
1 2 9
1 11 9
3 8
1 19 11
3 6
1 8 19
3 14
3 10
1 27 8
3 15
1 27 28
1 28 20
3 0
3 3
1 20 7
1 7 23
3 13
3 5
1 24 23
3 0
3 28
1 24 13
3 5
3 32
3 1
3 13
1 30 13
3 25
1 30 16
1 15 16
3 22
1 29 15
3 13
1 29 25
1 25 1
1 1 18
3 17
3 8
3 10
1 26 18
3 46
...

output:

1
6
6
10
10
21
28
36
36
45
66
66
91
91
105
105
120
120
120
120
136
171
190
253
253
253
276
276
300
300
300
325
351
351
351
351
406
406
435
435
435
435
435
406
435
435
435
300
435
435
406
435
435
136
435
190
435
435
435
136
406
105
120
136
120
435
435
253
435
66
435
435
435
91
435
435
28
435
55
55
43...

result:

ok 92 lines

Test #4:

score: 3
Accepted
time: 0ms
memory: 3564kb

input:

0
30 150
1 18 9
1 18 28
3 0
3 2
1 28 6
3 4
3 3
3 3
1 26 6
1 5 26
1 5 24
1 17 24
3 9
1 17 3
3 12
3 8
3 10
3 7
1 3 13
3 18
1 13 29
3 8
1 29 14
3 11
3 19
1 7 14
3 17
3 27
1 7 23
3 23
3 15
1 8 23
3 17
3 24
1 8 21
3 7
1 30 21
3 4
3 0
3 32
1 15 30
3 5
3 37
1 15 22
1 11 22
3 3
3 36
1 27 11
3 29
3 11
1 27 1...

output:

3
3
6
6
6
28
36
36
36
36
45
55
66
66
78
78
91
91
105
105
120
136
136
136
153
153
190
190
210
210
253
253
276
276
300
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
378
435
435
435
435
435
435
435
435
435
378
435
435
435
435
435
435
190
435
435
435
66
190
55
435
325
190
91
66...

result:

ok 92 lines

Test #5:

score: 0
Time Limit Exceeded

input:

0
30 150
1 1 16
3 1
3 0
3 2
3 1
1 26 1
3 4
1 10 21
1 29 8
1 11 17
3 8
3 8
3 3
3 3
3 6
1 2 9
2 29 8
3 11
3 4
3 16
3 8
1 28 4
3 11
3 18
3 11
3 21
1 20 9
1 6 15
1 4 3
3 5
1 12 5
1 22 25
3 20
3 26
1 7 13
1 16 6
3 34
3 21
3 27
2 1 16
3 34
3 39
3 38
3 3
1 24 5
2 16 6
3 36
3 23
1 27 8
3 15
1 10 17
3 29
3 4...

output:


result:


Subtask #2:

score: 0
Time Limit Exceeded

Test #29:

score: 2
Accepted
time: 0ms
memory: 3652kb

input:

1
1 147
3 0
3 0
3 1
3 1
3 3
3 0
3 6
3 6
3 0
3 2
3 0
3 5
3 12
3 1
3 2
3 10
3 13
3 15
3 3
3 12
3 20
3 18
3 10
3 12
3 2
3 12
3 14
3 26
3 12
3 24
3 7
3 7
3 6
3 29
3 32
3 16
3 23
3 14
3 25
3 13
3 13
3 31
3 20
3 26
3 0
3 40
3 23
3 28
3 35
3 1
3 31
3 2
3 34
3 37
3 3
3 39
3 17
3 4
3 41
3 11
3 16
3 48
3 10
3...

output:

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

result:

ok 147 lines

Test #30:

score: 2
Accepted
time: 0ms
memory: 3544kb

input:

1
2 10
1 1 2
3 1
3 1
3 1
3 1
3 1
3 2
3 6
2 0 3
3 2

output:

1
1
1
1
1
1
1
1

result:

ok 8 lines

Test #31:

score: 2
Accepted
time: 0ms
memory: 3628kb

input:

1
30 150
1 21 13
3 1
1 9 20
3 2
3 2
1 18 11
1 18 0
3 6
3 9
3 8
1 12 9
3 8
3 7
1 10 9
3 5
3 24
3 26
3 28
1 6 16
3 6
3 14
1 15 23
3 21
3 48
1 60 47
3 53
3 37
1 35 53
3 56
1 57 59
1 59 37
3 63
3 95
3 94
1 92 79
3 65
1 90 81
1 95 81
3 75
3 111
3 118
3 100
1 124 98
1 101 98
3 121
3 132
3 137
3 153
1 141 ...

output:

1
3
3
10
10
10
15
15
21
21
21
21
28
28
36
36
45
45
55
78
78
78
91
120
120
120
120
153
153
153
153
171
171
190
190
210
231
231
253
253
253
276
300
300
325
325
351
351
406
406
406
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
435
276
435
435
435
435
435
136
435
435
10...

result:

ok 92 lines

Test #32:

score: 2
Accepted
time: 0ms
memory: 3816kb

input:

1
30 150
1 4 26
3 0
1 26 5
3 1
1 24 19
1 19 15
3 1
3 14
1 6 28
1 28 4
3 3
3 28
3 28
1 24 27
3 25
3 27
1 4 17
1 11 4
3 22
1 47 58
3 43
1 60 53
3 57
1 73 83
3 70
1 95 82
3 91
3 92
3 73
3 88
1 71 92
3 78
1 110 102
1 102 106
1 106 111
3 123
3 144
3 136
1 159 147
1 145 147
3 191
1 182 172
3 178
3 205
3 2...

output:

1
3
10
10
21
21
21
28
28
45
55
66
78
91
91
91
91
105
153
153
153
190
210
210
210
210
253
253
253
276
325
325
378
378
378
378
435
435
435
435
435
435
435
378
435
435
378
435
435
435
435
435
435
435
435
253
435
435
276
435
435
231
435
435
435
435
435
435
136
300
276
435
435
300
435
190
435
435
36
435
...

result:

ok 92 lines

Test #33:

score: 0
Time Limit Exceeded

input:

1
30 150
1 19 12
3 1
1 22 9
3 0
3 6
1 1 20
3 6
3 5
3 1
3 1
3 5
3 10
3 5
3 4
3 2
1 10 8
3 12
3 20
1 11 17
3 14
3 12
1 31 18
3 12
3 9
3 1
3 17
1 19 10
3 11
3 9
1 10 16
3 13
3 5
3 31
1 7 15
3 13
3 26
1 22 27
3 19
1 15 14
3 17
1 21 23
1 26 28
1 3 24
1 0 11
3 0
3 63
1 19 11
3 29
3 63
1 28 25
3 58
3 63
3 ...

output:


result:


Subtask #3:

score: 0
Skipped

Dependency #1:

0%

Subtask #4:

score: 0
Skipped

Dependency #2:

0%

Subtask #5:

score: 0
Skipped

Dependency #3:

0%

Subtask #6:

score: 0
Skipped

Dependency #4:

0%

Subtask #7:

score: 0
Skipped

Dependency #6:

0%