Cod sursa(job #2940003)

Utilizator RusuRRusu Rares RusuR Data 14 noiembrie 2022 17:24:58
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <iostream>
#include <vector>
#include <assert.h>
#include <cstdio>

std::vector<int> parent(100001,0),size(100001,0);
int a, x, y, mult, op;

int getRoot(int u)
{ if(parent[u]==u)
    return u;
  else return parent[u]=getRoot(parent[u]);
}
void join(int u, int v)
{ u=getRoot(u);
  v=getRoot(v);
  if(size[u]<size[v])
    std::swap(u,v);
  parent[v]=u;
  size[u]+=size[v];
}

int main(){
 freopen("disjoint.in", "r", stdin);
 freopen("disjoint.out", "w", stdout);

 std::cin>>mult>>op;

 for(int i=1;i<=mult;i++)parent[i]=i,size[i]=1;

 while(op)
 { std::cin>>a>>x>>y;
   if(a==1)join(x,y);
   else if(getRoot(x)==getRoot(y))std::cout<<"DA\n";
        else std::cout<<"NU\n";
   op--;
 }
 return 0;
}