QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#84244 | #5672. Connectivity Problem | rniya | AC ✓ | 3ms | 3420kb | C++17 | 3.7kb | 2023-03-06 03:11:19 | 2023-03-06 03:11:23 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ALL(x) (x).begin(), (x).end()
#ifdef LOCAL
#include "debug.hpp"
#else
#define debug(...) void(0)
#endif
template <typename T> istream& operator>>(istream& is, vector<T>& v) {
for (T& x : v) is >> x;
return is;
}
template <typename T> ostream& operator<<(ostream& os, const vector<T>& v) {
for (size_t i = 0; i < v.size(); i++) {
os << v[i] << (i + 1 == v.size() ? "" : " ");
}
return os;
}
template <typename T> T gcd(T x, T y) { return y != 0 ? gcd(y, x % y) : x; }
template <typename T> T lcm(T x, T y) { return x / gcd(x, y) * y; }
int topbit(signed t) { return t == 0 ? -1 : 31 - __builtin_clz(t); }
int topbit(long long t) { return t == 0 ? -1 : 63 - __builtin_clzll(t); }
int botbit(signed a) { return a == 0 ? 32 : __builtin_ctz(a); }
int botbit(long long a) { return a == 0 ? 64 : __builtin_ctzll(a); }
int popcount(signed t) { return __builtin_popcount(t); }
int popcount(long long t) { return __builtin_popcountll(t); }
bool ispow2(int i) { return i && (i & -i) == i; }
long long MSK(int n) { return (1LL << n) - 1; }
template <class T> T ceil(T x, T y) {
assert(y >= 1);
return (x > 0 ? (x + y - 1) / y : x / y);
}
template <class T> T floor(T x, T y) {
assert(y >= 1);
return (x > 0 ? x / y : (x - y + 1) / y);
}
template <class T1, class T2> inline bool chmin(T1& a, T2 b) {
if (a > b) {
a = b;
return true;
}
return false;
}
template <class T1, class T2> inline bool chmax(T1& a, T2 b) {
if (a < b) {
a = b;
return true;
}
return false;
}
template <typename T> void mkuni(vector<T>& v) {
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
}
template <typename T> int lwb(const vector<T>& v, const T& x) { return lower_bound(v.begin(), v.end(), x) - v.begin(); }
const int INF = (1 << 30) - 1;
const long long IINF = (1LL << 60) - 1;
const int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};
const int MOD = 998244353;
// const int MOD = 1000000007;
#include <algorithm>
#include <cassert>
#include <vector>
struct UnionFind {
UnionFind(int n) : n(n), num(n), data(n, -1) {}
int find(int x) {
assert(0 <= x && x < n);
return data[x] < 0 ? x : data[x] = find(data[x]);
}
bool merge(int x, int y) {
assert(0 <= x && x < n);
assert(0 <= y && y < n);
if ((x = find(x)) == (y = find(y))) return false;
if (-data[x] < -data[y]) std::swap(x, y);
data[x] += data[y];
data[y] = x;
num--;
return true;
}
bool same(int x, int y) {
assert(0 <= x && x < n);
assert(0 <= y && y < n);
return find(x) == find(y);
}
int size(int x) {
assert(0 <= x && x < n);
return -data[find(x)];
}
int count() const { return num; }
std::vector<std::vector<int>> groups() {
std::vector<std::vector<int>> res(n);
for (int i = 0; i < n; i++) res[find(i)].emplace_back(i);
res.erase(std::remove_if(res.begin(), res.end(), [&](const std::vector<int>& v) { return v.empty(); }));
return res;
}
int operator[](int x) { return find(x); }
private:
int n, num;
// root node : -1 * component size
// otherwise : parent
std::vector<int> data;
};
const int MAX = 1010;
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
int n;
cin >> n;
UnionFind UF(MAX);
for (int i = 0; i < n; i++) {
int p, q;
cin >> p >> q;
cout << (UF.merge(p, q) ? 'N' : 'Y') << '\n';
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 3308kb
input:
12 3 4 4 9 8 1 2 3 5 6 2 9 5 9 7 3 4 8 5 6 1 8 6 1
output:
N N N N N Y N N N Y Y Y
result:
ok 12 lines
Test #2:
score: 0
Accepted
time: 2ms
memory: 3356kb
input:
100 26 39 2 21 4 17 2 16 12 19 27 0 8 43 10 12 6 29 5 9 19 32 13 47 13 36 3 6 13 18 9 40 11 40 29 16 7 24 10 35 19 41 6 24 28 21 26 35 23 47 2 30 19 17 10 6 22 6 15 25 19 11 2 8 11 25 14 23 27 1 1 16 16 0 23 34 2 25 10 17 3 35 23 37 13 0 22 7 27 29 15 13 10 5 18 40 28 46 19 0 23 40 4 46 19 3 20 39 1...
output:
N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N Y N Y Y Y N N Y Y Y Y Y N Y Y Y Y N Y Y Y Y Y Y Y N N N Y N N Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y
result:
ok 100 lines
Test #3:
score: 0
Accepted
time: 2ms
memory: 3420kb
input:
200 29 19 6 28 16 17 9 11 20 25 18 41 9 17 4 3 12 24 4 30 22 2 10 39 1 20 10 23 10 11 10 0 29 37 12 22 7 46 4 1 6 28 6 39 23 10 3 11 11 22 14 31 14 24 8 39 7 45 28 20 3 2 0 6 28 19 27 42 7 10 18 10 12 11 27 14 11 23 15 23 9 11 4 28 22 33 6 15 1 15 12 32 12 47 25 2 13 29 8 30 27 2 23 22 16 38 13 9 10...
output:
N N N N N N N N N N N N N N N N N N N N Y N Y N N N N N N Y Y Y N N N N Y N Y N Y Y N Y Y N N Y N Y Y Y N Y Y Y N Y Y N Y Y Y Y Y Y N Y Y N Y Y Y N Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y ...
result:
ok 200 lines
Test #4:
score: 0
Accepted
time: 0ms
memory: 3364kb
input:
1000 4 11 21 24 9 47 22 2 22 35 8 22 24 13 5 17 15 30 10 3 6 8 24 9 29 19 17 7 21 46 13 1 6 31 15 2 14 27 1 34 17 2 7 33 23 37 26 12 3 20 1 18 26 39 12 39 15 22 7 41 3 0 23 26 13 18 15 20 14 16 3 35 21 9 10 12 27 43 25 38 8 21 29 37 23 6 21 47 21 13 0 23 22 17 8 7 14 49 4 37 27 8 10 45 18 2 6 45 23 ...
output:
N N N N N N N N N N N N N N N N N N N N N N N N N N N Y Y N N N Y N N Y Y N N N N N Y Y Y Y Y Y N N N N Y Y Y Y N Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y N Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y Y ...
result:
ok 1000 lines
Test #5:
score: 0
Accepted
time: 2ms
memory: 3324kb
input:
3000 123 31 78 180 42 82 91 164 28 25 142 91 148 102 149 93 101 46 32 4 42 180 13 41 7 85 108 75 59 20 56 14 38 103 109 126 0 138 104 108 108 50 47 152 36 156 59 87 135 111 10 87 78 72 103 177 0 85 81 62 24 67 79 158 46 83 41 140 35 147 127 118 68 138 119 19 9 166 143 142 39 153 119 66 52 160 112 19...
output:
N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N N N N N N N N N N N N N Y N N N N N N N N N N N N N Y N Y N Y N N N N N N N N N Y N N N N N Y N N Y ...
result:
ok 3000 lines
Test #6:
score: 0
Accepted
time: 0ms
memory: 3308kb
input:
5000 149 83 70 47 5 128 22 146 149 8 9 43 69 1 129 126 119 8 60 161 112 124 78 190 77 20 137 8 149 61 63 100 132 48 9 98 96 84 0 20 74 40 27 23 1 67 27 95 41 64 134 7 54 44 14 57 26 10 106 11 136 193 111 76 25 60 39 69 43 154 146 114 38 79 51 83 78 3 88 166 69 186 85 32 11 59 94 116 124 52 97 43 84 ...
output:
N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N Y N N N N N N N N N N N N N N N N N N N N N Y N Y N N Y N N N N N N Y N N N N N N N N N N N N Y N N Y N Y N N Y Y N N N Y Y ...
result:
ok 5000 lines
Test #7:
score: 0
Accepted
time: 3ms
memory: 3420kb
input:
10000 510 915 206 189 588 690 871 253 802 171 200 257 875 77 699 781 440 52 653 286 648 388 343 442 302 425 344 481 898 14 497 76 417 93 787 381 401 151 491 951 248 76 192 712 616 21 554 708 51 543 671 27 432 275 430 318 230 989 405 990 419 249 143 62 247 349 455 202 614 947 672 608 39 445 413 445 3...
output:
N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N N ...
result:
ok 10000 lines