Cod sursa(job #2550826)

Utilizator Leonard123Mirt Leonard Leonard123 Data 19 februarie 2020 10:17:44
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include<fstream>
#define maxn 200005
using namespace std;
int a[maxn],r[maxn],m,n,x,y,op;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

void unite(int x, int y){
  if(r[x]>r[y])
    a[y]=x;
  else
    a[x]=y;
  if(r[x]==r[y])
    r[y]++;
}

int find(int x){
  int r,aux;
  for(r=x; r!=a[r]; r=a[r]);
  for(; x!=a[x];){
      aux=a[x];
      a[x]=r;
      x=aux;
  }
  return r;
}

int main(){
  cin>>n>>m;
  for(int i=1; i<=n; i++)
    a[i]=i, r[i]=1;
  while(m--){
    cin>>op>>x>>y;
    if(op==1){
      if(find(x)!=find(y))
        unite(find(x),find(y));
    }else{
      if(find(x)==find(y))
        cout<<"DA\n";
      else cout<<"NU\n";
    }
  }
}