QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#523301 | #8809. Telephone Plans | lwm7708 | 0 | 0ms | 3876kb | C++17 | 4.7kb | 2024-08-18 03:52:52 | 2024-08-18 03:52:52 |
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 - 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
Wrong Answer
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: 3584kb
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: 0ms
memory: 3652kb
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 435 435 435 153 435 190 435 435 435 136 406 120 120 136 120 435 435 276 435 66 435 435 435 91 435 435 28 435 55 55 43...
result:
wrong answer 51st lines differ - expected: '406', found: '435'
Subtask #2:
score: 0
Runtime Error
Test #29:
score: 2
Accepted
time: 0ms
memory: 3876kb
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: 3612kb
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%