Submission #420552


Source Code Expand

#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
#include <cmath>
#include <tuple>
#include <stack>
#include <iomanip>
#include <string>
#include <vector>
#include <queue>
 
#include <vector>

class UnionFind{
 private:
  std::vector<int> p_gs_; //正なら親ノードの番号で負なら自身がルートで値は-groupsize
  int groups_;            //groupの数

 public:
  const int nodes;        //ノードの数

  UnionFind(int size):p_gs_(size, -1),nodes(size),groups_(size){}

  bool unite(int x, int y){
    int rx = root(x), ry = root(y);
    if(rx!=ry){
      --groups_;
      if(p_gs_[ry] < p_gs_[rx]) std::swap(rx, ry); //rx<ryにしてrxにryを連結
      p_gs_[rx] += p_gs_[ry];
      p_gs_[ry] = rx;
    }
    return rx != ry;
  }

  bool same(int x, int y){ return root(x)==root(y); }
  int root(int x){ return p_gs_[x]<0 ? x : p_gs_[x]=root(p_gs_[x]); }
  int gsize(int x){ return -p_gs_[root(x)]; }
  int groups() const{ return groups_; }
};  
 
using namespace std;
int main(int, char** ){
    cin.tie(nullptr); ios::sync_with_stdio(false);

    int n,q;
    cin >> n >> q;
    int p,a,b;
    UnionFind uf(n);
    for(int i = 0; i < q; ++i){
        cin >> p >> a >> b;
        if(p==0){
            uf.unite(a,b);
        }else{
            if(uf.same(a,b)){
                cout << "Yes" << endl;
            }else{
                cout << "No" << endl;
            }
        }
    }

    return 0;
}

Submission Info

Submission Time
Task B - Union Find
User iraytno
Language C++11 (GCC 4.9.2)
Score 100
Code Size 1519 Byte
Status AC
Exec Time 714 ms
Memory 1312 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 42 ms 864 KB
subtask_01_01.txt AC 389 ms 852 KB
subtask_01_02.txt AC 28 ms 1312 KB
subtask_01_03.txt AC 630 ms 932 KB
subtask_01_04.txt AC 714 ms 1188 KB
subtask_01_05.txt AC 59 ms 928 KB
subtask_01_06.txt AC 58 ms 1220 KB
subtask_01_07.txt AC 623 ms 804 KB
subtask_01_08.txt AC 645 ms 1312 KB
subtask_01_09.txt AC 34 ms 884 KB
subtask_01_10.txt AC 28 ms 1184 KB
subtask_01_11.txt AC 622 ms 1000 KB
subtask_01_12.txt AC 586 ms 1308 KB
subtask_01_13.txt AC 508 ms 924 KB
subtask_01_14.txt AC 30 ms 1312 KB
subtask_01_15.txt AC 608 ms 924 KB
subtask_01_16.txt AC 649 ms 1264 KB
subtask_01_17.txt AC 374 ms 1312 KB
subtask_01_18.txt AC 385 ms 1188 KB