Cod sursa(job #2940025)

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

#define cin f
#define cout g

std::ifstream f("disjoint.in");
std::ofstream g("disjoint.out");

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(){
 cin>>mult>>op;

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

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