QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#523331#8809. Telephone Planslwm77080 1ms3844kbC++174.7kb2024-08-18 07:25:202024-08-18 07:25:20

Judging History

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

  • [2024-08-18 07:25:20]
  • 评测
  • 测评结果:0
  • 用时:1ms
  • 内存:3844kb
  • [2024-08-18 07:25:20]
  • 提交

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;
                            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);
                        ++sz_1;
                    } else {
                        break;
                    }
                    while (ptr_2 < sz_2) {
                        if (ptr_2 == -1 || it_2 == std::end(adj[proc_2[ptr_2]])) {
                            ++ptr_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);
                        ++sz_2;
                    } else {
                        swp = true;
                        break;
                    }
                }
            } else if (std::empty(adj[x])) {
                swp = true;
            }
            const std::int64_t mn_sz = std::min(sz_1, sz_2);
            pfxs[i + 1] += mn_sz * (std::size(grp) - mn_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;

}

详细

Subtask #1:

score: 0
Time Limit Exceeded

Test #1:

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

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: 3684kb

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: 3600kb

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: 3592kb

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: 3640kb

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: 1ms
memory: 3844kb

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: 1ms
memory: 3624kb

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: 3544kb

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%