QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#886788#8809. Telephone Planshhoppitree0 3ms32776kbC++202.0kb2025-02-07 11:32:552025-02-07 11:32:55

Judging History

This is the latest submission verdict.

  • [2025-02-07 11:32:55]
  • Judged
  • Verdict: 0
  • Time: 3ms
  • Memory: 32776kb
  • [2025-02-07 11:32:55]
  • Submitted

answer

#include <bits/stdc++.h>

using namespace std;

const int N = 5e5 + 5, Q = 1.5e6 + 5;

int cnt, wh[Q], siz[Q];
long long add[Q], del[Q];
set<int> G[N];

void color(int x, int y) {
    wh[x] = y;
    for (auto z : G[x]) {
        if (wh[z] != y) color(z, y);
    }
}

long long link(int x, int y) {
    if (siz[wh[x]] > siz[wh[y]]) swap(x, y);
    long long res = 1ll * siz[wh[x]] * siz[wh[y]];
    G[x].insert(y), G[y].insert(x);
    siz[wh[y]] += siz[wh[x]];
    color(x, wh[y]);
    return res;
}

long long cut(int x, int y) {
    G[x].erase(y), G[y].erase(x);
    queue< tuple<int, int, set<int>::iterator> > Q[2];
    vector<int> p[2];
    Q[0].push({x, 0, G[x].begin()}), Q[1].push({y, 0, G[y].begin()});
    for (int i = 0; !Q[i].empty(); i ^= 1) {
        auto [a, b, c] = Q[i].front(); Q[i].pop();
        if (c == G[a].begin()) p[i].push_back(a);
        while (c != G[a].end() && *c == b) ++c;
        if (c != G[a].end()) {
            Q[i].push({*c, a, G[*c].begin()});
            Q[i].push({a, b, next(c)});
        }
    }
    if (!Q[0].empty()) swap(Q[0], Q[1]), swap(p[0], p[1]);
    ++cnt;
    for (auto v : p[0]) {
        wh[v] = cnt;
    }
    siz[cnt] = p[0].size(), siz[wh[p[1][0]]] -= p[0].size();
    return 1ll * siz[x] * siz[y];
}

signed main() {
    int E, n, q; scanf("%d%d%d", &E, &n, &q);
    cnt = n;
    for (int i = 1; i <= n; ++i) wh[i] = i, siz[i] = 1;
    long long ans = 0;
    for (int i = 1; i <= q; ++i) {
        add[i] = add[i - 1], del[i] = del[i - 1];
        int opt; scanf("%d", &opt);
        if (opt == 1) {
            long long x, y; scanf("%lld%lld", &x, &y);
            if (E) x ^= ans, y ^= ans;
            add[i] += link(x, y);
        } else if (opt == 2) {
            long long x, y; scanf("%lld%lld", &x, &y);
            if (E) x ^= ans, y ^= ans;
            del[i] += cut(x, y);
        } else {
            long long x; scanf("%lld", &x);
            if (E) x ^= ans;
            printf("%lld\n", ans = add[i] - del[i - x]);
        }
    }
    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: 2ms
memory: 31528kb

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

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

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
434
435
435
435
430
435
435
434
435
435
422
435
425
435
435
435
422
434
420
421
422
421
435
435
428
435
417
435
435
435
419
435
435
413
435
416
4...

result:

wrong answer 44th lines differ - expected: '406', found: '434'

Subtask #2:

score: 0
Runtime Error

Test #29:

score: 2
Accepted
time: 1ms
memory: 32384kb

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: 3ms
memory: 32764kb

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

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:


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%