Cod sursa(job #2940017)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 14 noiembrie 2022 17:48:01
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;

/*
#define cin fin
#define cout fout
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
*/

vector<int> fat, sz;

int getFat(int x){
  if(x==fat[x]) return x;
  return fat[x]=getFat(fat[x]);
}

void join(int a, int b){
  a=getFat(a), b=getFat(b);
  //if(a==b) return;
  if(sz[a]<sz[b]) swap(a, b);
  fat[b]=a;
  sz[a]+=sz[b]; 
}

int main(){
  int n, q;
  cin>>n>>q;
  fat.resize(n+1);
  sz.resize(n+1);
  for(int i=1;i<=n;++i) fat[i]=i, sz[i]=1;
  for(int i=1;i<=q;++i){
    int t;
    cin>>t;
    if(t==1){
      int a, b;
      cin>>a>>b;
      join(a, b);
    }
    else{
      int a, b;
      cin>>a>>b;
      if(getFat(a)==getFat(b)) cout<<"NU\n";
      else cout<<"DA\n";
    }
  }

}