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
AC × 1
AC × 19
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