Pagini recente » Cod sursa (job #2786131) | Cod sursa (job #3158439) | Cod sursa (job #2308144) | Cod sursa (job #2775871) | Cod sursa (job #2988761)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100005;
const bool INEF = true;
int N, M;
int rang[NMAX], dad[NMAX];
int do_find_inef(int nod){
if(dad[nod] == nod){
return nod;
}
return do_find_inef(dad[nod]);
}
int do_find_ef(int nod){
if(dad[nod] == nod){
return nod;
}
int ans = do_find_ef(dad[nod]);
dad[nod] = ans;
return ans;
}
void do_union_inef(int nod1, int nod2){
dad[nod2] = nod1;
}
void do_union_ef(int nod1, int nod2){
if(rang[nod1] < rang[nod2]){
dad[nod1] = nod2;
}else{
dad[nod2] = nod1;
}
}
int do_find(int nod){
if(INEF){
return do_find_inef(nod);
}else{
return do_find_ef(nod);
}
}
void do_union(int nod1, int nod2){
if(INEF){
do_union_inef(nod1, nod2);
}else{
do_union_ef(nod1, nod2);
}
}
int main()
{
fin >> N >> M;
for(int i = 1; i <= N; i++){
dad[i] = i;
rang[i] = 0;
}
for(int i = 1; i <= M; i++){
int op, x, y;
fin >> op >> x >> y;
if(op == 1){
do_union(do_find(x), do_find(y));
}else{
if(do_find(x) == do_find(y)){
fout << "DA\n";
}else{
fout << "NU\n";
}
}
}
return 0;
}