#include <algorithm>
#include <iostream>
#include <vector>
#define entire(v) std::begin(v), std::end(v)
using i64 = int64_t;
struct Operation {
i64 l1, parent_l1, r1, parent_r1;
bool is_bipartite;
};
constexpr i64 root(i64 n) {
i64 i = 0;
for (; i * i <= n; i++)
;
return i - 1;
}
class UnionFind {
std::vector<i64> parent;
std::vector<bool> edge_parity;
std::vector<Operation> operations;
public:
bool is_bipartite = true;
UnionFind(size_t sz)
: parent(sz, -1), edge_parity(sz, false), operations() {}
void clear() {
std::fill(entire(parent), -1);
operations.clear();
is_bipartite = true;
}
i64 find(i64 idx) const {
if (parent[idx] < 0)
return idx;
else
return find(parent[idx]);
}
bool parity(i64 idx) {
if (parent[idx] < 0)
return false;
else
return parity(parent[idx]) ^ edge_parity[idx];
}
std::pair<i64, bool> both(i64 idx) { return {find(idx), parity(idx)}; }
bool lag_fagforening(i64 l, i64 r) {
auto [l1, lp] = both(l);
auto [r1, rp] = both(r);
operations.push_back({
.l1 = l1,
.parent_l1 = parent[l1],
.r1 = r1,
.parent_r1 = parent[r1],
.is_bipartite = is_bipartite,
});
if (l1 == r1) {
return !(is_bipartite &= lp != rp);
} else {
if (-parent[l1] < -parent[r1]) {
std::swap(l1, r1);
std::swap(lp, rp);
}
parent[l1] += parent[r1];
parent[r1] = l1;
edge_parity[r1] = 1 ^ lp ^ rp;
return false;
}
}
void tvungen_lønnsnemnd() {
auto [l1, parent_l1, r1, parent_r1, bpt] = operations.back();
operations.pop_back();
parent[l1] = parent_l1;
parent[r1] = parent_r1;
is_bipartite = bpt;
}
};
struct {
template <typename T>
operator T() const {
T x;
std::cin >> x;
return x;
}
} in;
#pragma GCC diagnostic ignored "-Wreturn-type"
template <class T, class U>
struct SwapComparator {
void operator()(std::pair<T, U> const &lhs, std::pair<T, U> const &rhs) {
return std::tie(lhs.second, lhs.first) <
std::tie(rhs.second, rhs.first);
}
};
main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
i64 n, m, q;
std::cin >> n >> m >> q;
std::vector<std::pair<i64, i64>> edges(m);
for (i64 i = 0; i < m; i++) {
edges[i] = {(i64)in - 1, (i64)in - 1};
}
UnionFind dsu(n);
static constexpr i64 root_m = 450; // root(200'000);
struct Query {
i64 l, r, i;
};
std::vector<Query> queries(q);
for (i64 i = 0; i < q; i++) queries[i] = {(i64)in - 1, (i64)in, i};
std::sort(entire(queries), [](auto &&lhs, auto &&rhs) {
return std::pair<i64, i64>{lhs.l / root_m, -lhs.r} <
std::pair<i64, i64>{rhs.l / root_m, -rhs.r};
});
std::vector<bool> answers(q);
i64 l = 0;
i64 r = 0;
for (i64 start = 0; start < m; start += root_m) {
l = r;
while (r < q && queries[r].l < start + root_m) r++;
for (i64 x = 0; x < start; x++) {
dsu.lag_fagforening(edges[x].first, edges[x].second);
}
i64 w = m;
for (i64 i = l; i < r; i++) {
for (i64 o = queries[i].r; o < w; o++)
dsu.lag_fagforening(edges[o].first, edges[o].second);
w = queries[i].r;
for (i64 g = start; g < queries[i].l; g++)
dsu.lag_fagforening(edges[g].first, edges[g].second);
answers[queries[i].i] = dsu.is_bipartite;
for (i64 g = start; g < queries[i].l; g++)
dsu.tvungen_lønnsnemnd();
}
dsu.clear();
}
for (auto x : answers) {
std::cout << (x ? "NO\n" : "YES\n");
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
340 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
1 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
340 KB |
Output is correct |
19 |
Correct |
1 ms |
340 KB |
Output is correct |
20 |
Correct |
1 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
340 KB |
Output is correct |
22 |
Correct |
1 ms |
340 KB |
Output is correct |
23 |
Correct |
1 ms |
340 KB |
Output is correct |
24 |
Correct |
1 ms |
340 KB |
Output is correct |
25 |
Correct |
1 ms |
340 KB |
Output is correct |
26 |
Correct |
1 ms |
340 KB |
Output is correct |
27 |
Correct |
1 ms |
340 KB |
Output is correct |
28 |
Correct |
1 ms |
340 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
340 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
1 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
340 KB |
Output is correct |
19 |
Correct |
1 ms |
340 KB |
Output is correct |
20 |
Correct |
1 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
340 KB |
Output is correct |
22 |
Correct |
1 ms |
340 KB |
Output is correct |
23 |
Correct |
1 ms |
340 KB |
Output is correct |
24 |
Correct |
1 ms |
340 KB |
Output is correct |
25 |
Correct |
1 ms |
340 KB |
Output is correct |
26 |
Correct |
1 ms |
340 KB |
Output is correct |
27 |
Correct |
1 ms |
340 KB |
Output is correct |
28 |
Correct |
1 ms |
340 KB |
Output is correct |
29 |
Correct |
7 ms |
468 KB |
Output is correct |
30 |
Correct |
9 ms |
492 KB |
Output is correct |
31 |
Correct |
9 ms |
572 KB |
Output is correct |
32 |
Correct |
9 ms |
468 KB |
Output is correct |
33 |
Correct |
10 ms |
596 KB |
Output is correct |
34 |
Correct |
9 ms |
468 KB |
Output is correct |
35 |
Correct |
9 ms |
468 KB |
Output is correct |
36 |
Correct |
8 ms |
468 KB |
Output is correct |
37 |
Correct |
8 ms |
576 KB |
Output is correct |
38 |
Correct |
8 ms |
572 KB |
Output is correct |
39 |
Correct |
8 ms |
576 KB |
Output is correct |
40 |
Correct |
9 ms |
468 KB |
Output is correct |
41 |
Correct |
9 ms |
564 KB |
Output is correct |
42 |
Correct |
9 ms |
476 KB |
Output is correct |
43 |
Correct |
9 ms |
468 KB |
Output is correct |
44 |
Correct |
9 ms |
564 KB |
Output is correct |
45 |
Correct |
9 ms |
568 KB |
Output is correct |
46 |
Correct |
9 ms |
468 KB |
Output is correct |
47 |
Correct |
8 ms |
564 KB |
Output is correct |
48 |
Correct |
9 ms |
564 KB |
Output is correct |
49 |
Correct |
9 ms |
468 KB |
Output is correct |
50 |
Correct |
8 ms |
468 KB |
Output is correct |
51 |
Correct |
9 ms |
564 KB |
Output is correct |
52 |
Correct |
12 ms |
468 KB |
Output is correct |
53 |
Correct |
9 ms |
468 KB |
Output is correct |
54 |
Correct |
9 ms |
468 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
878 ms |
19284 KB |
Output is correct |
4 |
Correct |
1078 ms |
20088 KB |
Output is correct |
5 |
Correct |
1102 ms |
19896 KB |
Output is correct |
6 |
Correct |
1425 ms |
19288 KB |
Output is correct |
7 |
Correct |
1495 ms |
19312 KB |
Output is correct |
8 |
Correct |
1805 ms |
19048 KB |
Output is correct |
9 |
Correct |
1754 ms |
19312 KB |
Output is correct |
10 |
Correct |
1505 ms |
20080 KB |
Output is correct |
11 |
Correct |
1289 ms |
19256 KB |
Output is correct |
12 |
Correct |
1209 ms |
19896 KB |
Output is correct |
13 |
Correct |
1635 ms |
18664 KB |
Output is correct |
14 |
Correct |
1807 ms |
19036 KB |
Output is correct |
15 |
Correct |
1712 ms |
19612 KB |
Output is correct |
16 |
Correct |
1504 ms |
20088 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
340 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
1 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
340 KB |
Output is correct |
19 |
Correct |
1 ms |
340 KB |
Output is correct |
20 |
Correct |
1 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
340 KB |
Output is correct |
22 |
Correct |
1 ms |
340 KB |
Output is correct |
23 |
Correct |
1 ms |
340 KB |
Output is correct |
24 |
Correct |
1 ms |
340 KB |
Output is correct |
25 |
Correct |
1 ms |
340 KB |
Output is correct |
26 |
Correct |
1 ms |
340 KB |
Output is correct |
27 |
Correct |
1 ms |
340 KB |
Output is correct |
28 |
Correct |
1 ms |
340 KB |
Output is correct |
29 |
Correct |
878 ms |
19284 KB |
Output is correct |
30 |
Correct |
1078 ms |
20088 KB |
Output is correct |
31 |
Correct |
1102 ms |
19896 KB |
Output is correct |
32 |
Correct |
1425 ms |
19288 KB |
Output is correct |
33 |
Correct |
1495 ms |
19312 KB |
Output is correct |
34 |
Correct |
1805 ms |
19048 KB |
Output is correct |
35 |
Correct |
1754 ms |
19312 KB |
Output is correct |
36 |
Correct |
1505 ms |
20080 KB |
Output is correct |
37 |
Correct |
1289 ms |
19256 KB |
Output is correct |
38 |
Correct |
1209 ms |
19896 KB |
Output is correct |
39 |
Correct |
1635 ms |
18664 KB |
Output is correct |
40 |
Correct |
1807 ms |
19036 KB |
Output is correct |
41 |
Correct |
1712 ms |
19612 KB |
Output is correct |
42 |
Correct |
1504 ms |
20088 KB |
Output is correct |
43 |
Correct |
1197 ms |
19284 KB |
Output is correct |
44 |
Correct |
1401 ms |
20120 KB |
Output is correct |
45 |
Correct |
1454 ms |
20084 KB |
Output is correct |
46 |
Correct |
1827 ms |
19380 KB |
Output is correct |
47 |
Execution timed out |
2005 ms |
19292 KB |
Time limit exceeded |
48 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
340 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
1 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
340 KB |
Output is correct |
19 |
Correct |
1 ms |
340 KB |
Output is correct |
20 |
Correct |
1 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
340 KB |
Output is correct |
22 |
Correct |
1 ms |
340 KB |
Output is correct |
23 |
Correct |
1 ms |
340 KB |
Output is correct |
24 |
Correct |
1 ms |
340 KB |
Output is correct |
25 |
Correct |
1 ms |
340 KB |
Output is correct |
26 |
Correct |
1 ms |
340 KB |
Output is correct |
27 |
Correct |
1 ms |
340 KB |
Output is correct |
28 |
Correct |
1 ms |
340 KB |
Output is correct |
29 |
Correct |
7 ms |
468 KB |
Output is correct |
30 |
Correct |
9 ms |
492 KB |
Output is correct |
31 |
Correct |
9 ms |
572 KB |
Output is correct |
32 |
Correct |
9 ms |
468 KB |
Output is correct |
33 |
Correct |
10 ms |
596 KB |
Output is correct |
34 |
Correct |
9 ms |
468 KB |
Output is correct |
35 |
Correct |
9 ms |
468 KB |
Output is correct |
36 |
Correct |
8 ms |
468 KB |
Output is correct |
37 |
Correct |
8 ms |
576 KB |
Output is correct |
38 |
Correct |
8 ms |
572 KB |
Output is correct |
39 |
Correct |
8 ms |
576 KB |
Output is correct |
40 |
Correct |
9 ms |
468 KB |
Output is correct |
41 |
Correct |
9 ms |
564 KB |
Output is correct |
42 |
Correct |
9 ms |
476 KB |
Output is correct |
43 |
Correct |
9 ms |
468 KB |
Output is correct |
44 |
Correct |
9 ms |
564 KB |
Output is correct |
45 |
Correct |
9 ms |
568 KB |
Output is correct |
46 |
Correct |
9 ms |
468 KB |
Output is correct |
47 |
Correct |
8 ms |
564 KB |
Output is correct |
48 |
Correct |
9 ms |
564 KB |
Output is correct |
49 |
Correct |
9 ms |
468 KB |
Output is correct |
50 |
Correct |
8 ms |
468 KB |
Output is correct |
51 |
Correct |
9 ms |
564 KB |
Output is correct |
52 |
Correct |
12 ms |
468 KB |
Output is correct |
53 |
Correct |
9 ms |
468 KB |
Output is correct |
54 |
Correct |
9 ms |
468 KB |
Output is correct |
55 |
Correct |
1265 ms |
14664 KB |
Output is correct |
56 |
Execution timed out |
2029 ms |
18012 KB |
Time limit exceeded |
57 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
212 KB |
Output is correct |
2 |
Correct |
1 ms |
212 KB |
Output is correct |
3 |
Correct |
0 ms |
212 KB |
Output is correct |
4 |
Correct |
0 ms |
212 KB |
Output is correct |
5 |
Correct |
1 ms |
212 KB |
Output is correct |
6 |
Correct |
1 ms |
212 KB |
Output is correct |
7 |
Correct |
1 ms |
212 KB |
Output is correct |
8 |
Correct |
1 ms |
340 KB |
Output is correct |
9 |
Correct |
1 ms |
340 KB |
Output is correct |
10 |
Correct |
1 ms |
340 KB |
Output is correct |
11 |
Correct |
1 ms |
340 KB |
Output is correct |
12 |
Correct |
1 ms |
340 KB |
Output is correct |
13 |
Correct |
1 ms |
340 KB |
Output is correct |
14 |
Correct |
1 ms |
340 KB |
Output is correct |
15 |
Correct |
1 ms |
340 KB |
Output is correct |
16 |
Correct |
1 ms |
340 KB |
Output is correct |
17 |
Correct |
1 ms |
340 KB |
Output is correct |
18 |
Correct |
1 ms |
340 KB |
Output is correct |
19 |
Correct |
1 ms |
340 KB |
Output is correct |
20 |
Correct |
1 ms |
340 KB |
Output is correct |
21 |
Correct |
1 ms |
340 KB |
Output is correct |
22 |
Correct |
1 ms |
340 KB |
Output is correct |
23 |
Correct |
1 ms |
340 KB |
Output is correct |
24 |
Correct |
1 ms |
340 KB |
Output is correct |
25 |
Correct |
1 ms |
340 KB |
Output is correct |
26 |
Correct |
1 ms |
340 KB |
Output is correct |
27 |
Correct |
1 ms |
340 KB |
Output is correct |
28 |
Correct |
1 ms |
340 KB |
Output is correct |
29 |
Correct |
7 ms |
468 KB |
Output is correct |
30 |
Correct |
9 ms |
492 KB |
Output is correct |
31 |
Correct |
9 ms |
572 KB |
Output is correct |
32 |
Correct |
9 ms |
468 KB |
Output is correct |
33 |
Correct |
10 ms |
596 KB |
Output is correct |
34 |
Correct |
9 ms |
468 KB |
Output is correct |
35 |
Correct |
9 ms |
468 KB |
Output is correct |
36 |
Correct |
8 ms |
468 KB |
Output is correct |
37 |
Correct |
8 ms |
576 KB |
Output is correct |
38 |
Correct |
8 ms |
572 KB |
Output is correct |
39 |
Correct |
8 ms |
576 KB |
Output is correct |
40 |
Correct |
9 ms |
468 KB |
Output is correct |
41 |
Correct |
9 ms |
564 KB |
Output is correct |
42 |
Correct |
9 ms |
476 KB |
Output is correct |
43 |
Correct |
9 ms |
468 KB |
Output is correct |
44 |
Correct |
9 ms |
564 KB |
Output is correct |
45 |
Correct |
9 ms |
568 KB |
Output is correct |
46 |
Correct |
9 ms |
468 KB |
Output is correct |
47 |
Correct |
8 ms |
564 KB |
Output is correct |
48 |
Correct |
9 ms |
564 KB |
Output is correct |
49 |
Correct |
9 ms |
468 KB |
Output is correct |
50 |
Correct |
8 ms |
468 KB |
Output is correct |
51 |
Correct |
9 ms |
564 KB |
Output is correct |
52 |
Correct |
12 ms |
468 KB |
Output is correct |
53 |
Correct |
9 ms |
468 KB |
Output is correct |
54 |
Correct |
9 ms |
468 KB |
Output is correct |
55 |
Correct |
878 ms |
19284 KB |
Output is correct |
56 |
Correct |
1078 ms |
20088 KB |
Output is correct |
57 |
Correct |
1102 ms |
19896 KB |
Output is correct |
58 |
Correct |
1425 ms |
19288 KB |
Output is correct |
59 |
Correct |
1495 ms |
19312 KB |
Output is correct |
60 |
Correct |
1805 ms |
19048 KB |
Output is correct |
61 |
Correct |
1754 ms |
19312 KB |
Output is correct |
62 |
Correct |
1505 ms |
20080 KB |
Output is correct |
63 |
Correct |
1289 ms |
19256 KB |
Output is correct |
64 |
Correct |
1209 ms |
19896 KB |
Output is correct |
65 |
Correct |
1635 ms |
18664 KB |
Output is correct |
66 |
Correct |
1807 ms |
19036 KB |
Output is correct |
67 |
Correct |
1712 ms |
19612 KB |
Output is correct |
68 |
Correct |
1504 ms |
20088 KB |
Output is correct |
69 |
Correct |
1197 ms |
19284 KB |
Output is correct |
70 |
Correct |
1401 ms |
20120 KB |
Output is correct |
71 |
Correct |
1454 ms |
20084 KB |
Output is correct |
72 |
Correct |
1827 ms |
19380 KB |
Output is correct |
73 |
Execution timed out |
2005 ms |
19292 KB |
Time limit exceeded |
74 |
Halted |
0 ms |
0 KB |
- |