Pagini recente » Cod sursa (job #404735) | Cod sursa (job #2134876) | Cod sursa (job #1984066) | Cod sursa (job #2076925) | Cod sursa (job #2183868)
#include <fstream>
#define DIM 100005
using namespace std;
int N, M, root[DIM], count[DIM];
int op, a, b;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int root_get(int x){
int var = x;
while(var != root[var])
var = root[var];
while(x != root[x]){
int aux = root[x];
root[x] = var;
x = aux;
}
return var;
}
void join(int x, int y){
int a = root_get(x), b = root_get(y);
if(a == b)
return;
if(count[a] >= count[b]){
root[b] = a;
count[a] += count[b];
}else{
root[a] = b;
count[b] += count[a];
}
}
void check(int x, int y){
if(root_get(x) == root_get(y))
fout << "DA\n";
else
fout << "NU\n";
}
int main(){
fin >> N >> M;
for(int i = 1; i <= N ;i ++){
root[i] = i;
count[i] = 1;
}
while( M -- ){
fin >> op >> a >> b;
if(op == 1)
join(a, b);
else
check(a, b);
}
fin.close();
fout.close();
return 0;
}