Pagini recente » Istoria paginii utilizator/adrian18 | Cod sursa (job #1820962)
#include <iostream>
#include <fstream>
using namespace std;
const int MAX = 100000;
struct Node{
int value;
int parent;
};
Node sets[MAX];
int getRoot(int x){
if(sets[x].parent == -1){
return x;
}else{
return getRoot(sets[x].parent);
}
}
int main(){
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; i++){
sets[i].value = i;
sets[i].parent = -1;
}
for(int i = 1; i <= m; i++){
int op, x, y;
fin >> op >> x >> y;
if(op == 1){
int rx = getRoot(x);
int ry = getRoot(y);
sets[min(rx, ry)].parent = max(rx, ry);
}else if(op == 2){
int rx = getRoot(x);
int ry = getRoot(y);
if(rx == ry){
fout << "DA\n";
}else{
fout << "NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}