QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#811791#8809. Telephone Plansucup-team0040 0ms3752kbC++233.9kb2024-12-13 01:21:122024-12-13 01:21:16

Judging History

This is the latest submission verdict.

  • [2024-12-13 01:21:16]
  • Judged
  • Verdict: 0
  • Time: 0ms
  • Memory: 3752kb
  • [2024-12-13 01:21:12]
  • Submitted

answer

#include <bits/stdc++.h>

using i64 = long long;
using u64 = unsigned long long;
using u32 = unsigned;
using u128 = unsigned __int128;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    
    int E;
    std::cin >> E;
    
    int N, Q;
    std::cin >> N >> Q;
    
    std::vector<int> siz(2 * N, 1), bel(N);
    std::iota(bel.begin(), bel.end(), 0);
    int curbel = N;
    
    std::vector<std::set<int>> adj(N);
    
    auto link = [&](int x, int y) {
        if (siz[bel[y]] > siz[bel[x]]) {
            std::swap(x, y);
        }
        siz[bel[x]] += siz[bel[y]];
        auto dfs = [&](auto &&self, int a, int p) -> void {
            bel[a] = bel[x];
            for (auto b : adj[a]) {
                if (b == p) {
                    continue;
                }
                self(self, b, a);
            }
        };
        dfs(dfs, y, -1);
        adj[x].insert(y);
        adj[y].insert(x);
    };
    
    auto cut = [&](int x, int y) -> void {
        adj[x].erase(y);
        adj[y].erase(x);
        std::vector<std::pair<int, std::set<int>::iterator>> sx, sy;
        sx.emplace_back(x, adj[x].begin());
        sy.emplace_back(y, adj[y].begin());
        
        std::vector<int> vx {x}, vy {y};
        while (!sx.empty() && !sy.empty()) {
            {
                auto &[a, it] = sx.back();
                if (it == adj[a].end()) {
                    sx.pop_back();
                } else {
                    int b = *(it++);
                    if (sx.size() == 1 || b != sx[sx.size() - 2].first) {
                        sx.emplace_back(b, adj[b].begin());
                        vx.push_back(x);
                    }
                }
            }
            {
                auto &[a, it] = sy.back();
                if (it == adj[a].end()) {
                    sy.pop_back();
                } else {
                    int b = *(it++);
                    if (sy.size() == 1 || b != sy[sy.size() - 2].first) {
                        sy.emplace_back(b, adj[b].begin());
                        vy.push_back(y);
                    }
                }
            }
        }
        
        if (sx.empty()) {
            siz[bel[y]] -= vx.size();
            for (auto i : vx) {
                bel[i] = curbel;
            }
            siz[curbel++] = vx.size();
        } else {
            siz[bel[x]] -= vy.size();
            for (auto i : vy) {
                bel[i] = curbel;
            }
            siz[curbel++] = vy.size();
        }
    };
    
    i64 cur = 0;
    i64 lst = 0;
    
    std::vector<i64> pre(Q + 1);
    std::vector<i64> val(Q + 1);
    
    for (int i = 1; i <= Q; i++) {
        int o;
        std::cin >> o;
        
        if (o == 1) {
            i64 x, y;
            std::cin >> x >> y;
            if (E) {
                x ^= lst;
                y ^= lst;
            }
            x--;
            y--;
            cur += 1LL * siz[bel[x]] * siz[bel[y]];
            link(x, y);
            
            val[i] = cur;
            pre[i] = pre[i - 1] + val[i] - std::min(val[i - 1], val[i]);
        } else if (o == 2) {
            i64 x, y;
            std::cin >> x >> y;
            if (E) {
                x ^= lst;
                y ^= lst;
            }
            x--;
            y--;
            cut(x, y);
            cur -= 1LL * siz[bel[x]] * siz[bel[y]];
            
            val[i] = cur;
            pre[i] = pre[i - 1] + val[i] - std::min(val[i - 1], val[i]);
        } else {
            i64 t;
            std::cin >> t;
            if (E) {
                t ^= lst;
            }
            
            val[i] = cur;
            pre[i] = pre[i - 1] + val[i] - std::min(val[i - 1], val[i]);
            
            lst = pre[i] - pre[i - t] + val[i - t];
            std::cout << lst << "\n";
        }
    }
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

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

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

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

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

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
Wrong Answer
time: 0ms
memory: 3752kb

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:

1
1
1
1
3
6
6
6
6
6
7
7
7
7
8
8
8
8
12
15
15
22
21
22
22
22
22
15
24
23
24
28
29
28
32
32
31
23
31
38
47
48
40
50
60
62
65
56
64
64
39
70
70
70
70
62
71
57
71
71
71
62
79
80
72
86
50
85
72
75
47
36
86
79
72
54
36
50
32
68
72
11
86
72
86
32
79
34
79
86
78
20

result:

wrong answer 65th lines differ - expected: '68', found: '72'

Subtask #2:

score: 0
Runtime Error

Test #29:

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

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

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

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

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
Runtime Error

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%