QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#523331 | #8809. Telephone Plans | lwm7708 | 0 | 1ms | 3844kb | C++17 | 4.7kb | 2024-08-18 07:25:20 | 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%