Submission #7570168
Source Code Expand
#include <bits/stdc++.h> using namespace std; using i64 = int_fast64_t; using ui64 = uint_fast64_t; #define REP(i, n) for (i64 (i) = 0; (i) < (n); ++(i)) #define FOR(i, a, b) for (i64 (i) = (a); (i) < (b); ++(i)) /* ・UnionFind木 > O(α(n)) [使用例] UnionFind uf(n); // 頂点数nのUF木を宣言 uf.unite(a,b); // 点a,b([0,n))が同じ集合に属する (すでに同じだったらfalseを返す) bool isSameGroup = uf.same(a,b); // 点a,bが同じ集合に属するか確認 cout << uf.find(a) << endl; // 点aが属する集合を求める cout << uf.size(a) << endl; // 点aが属する集合の要素の数を求める */ struct UnionFind { vector<int> parent; int __size; UnionFind(int size_) : parent(size_, -1), __size(size_) {} bool unite(int x,int y) { if ((x=find(x)) != (y=find(y))) { if (parent[y] < parent[x]) swap(x,y); parent[x] += parent[y]; parent[y] = x; __size--; return true; } return false; } bool same(int x,int y){return find(x)==find(y);} int find(int x){return parent[x] < 0 ? x : parent[x] = find(parent[x]);} int size(int x){return -parent[find(x)];} int size(){return __size;} }; int N, Q; signed main() { cin >> N >> Q; UnionFind uf(N); while (Q--) { int P, A, B; cin >> P >> A >> B; if (P == 0) uf.unite(A, B); else cout << (uf.same(A, B) ? "Yes" : "No") << endl; } }
Submission Info
Submission Time | |
---|---|
Task | B - Union Find |
User | morio__ |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 1445 Byte |
Status | AC |
Exec Time | 467 ms |
Memory | 1280 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 100 / 100 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | 00_sample_01.txt |
All | 00_sample_01.txt, subtask_01_01.txt, subtask_01_02.txt, subtask_01_03.txt, subtask_01_04.txt, subtask_01_05.txt, subtask_01_06.txt, subtask_01_07.txt, subtask_01_08.txt, subtask_01_09.txt, subtask_01_10.txt, subtask_01_11.txt, subtask_01_12.txt, subtask_01_13.txt, subtask_01_14.txt, subtask_01_15.txt, subtask_01_16.txt, subtask_01_17.txt, subtask_01_18.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
00_sample_01.txt | AC | 1 ms | 256 KB |
subtask_01_01.txt | AC | 275 ms | 640 KB |
subtask_01_02.txt | AC | 1 ms | 640 KB |
subtask_01_03.txt | AC | 415 ms | 1024 KB |
subtask_01_04.txt | AC | 459 ms | 1280 KB |
subtask_01_05.txt | AC | 24 ms | 256 KB |
subtask_01_06.txt | AC | 25 ms | 640 KB |
subtask_01_07.txt | AC | 431 ms | 768 KB |
subtask_01_08.txt | AC | 467 ms | 1280 KB |
subtask_01_09.txt | AC | 1 ms | 256 KB |
subtask_01_10.txt | AC | 2 ms | 640 KB |
subtask_01_11.txt | AC | 406 ms | 896 KB |
subtask_01_12.txt | AC | 457 ms | 1280 KB |
subtask_01_13.txt | AC | 360 ms | 768 KB |
subtask_01_14.txt | AC | 2 ms | 640 KB |
subtask_01_15.txt | AC | 435 ms | 768 KB |
subtask_01_16.txt | AC | 466 ms | 1280 KB |
subtask_01_17.txt | AC | 307 ms | 896 KB |
subtask_01_18.txt | AC | 306 ms | 896 KB |