Pagini recente » Cod sursa (job #2001104) | Cod sursa (job #2367583) | Cod sursa (job #1420743) | Cod sursa (job #1786870) | Cod sursa (job #2686427)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
int arb[100002], inalt[100002];
int gaseste_papa(int a){
while(arb[a] != a){
a = arb[a];
}
return a;
}
void union_(int a, int b){
a = gaseste_papa(a);
b = gaseste_papa(b);
if(inalt[a] < inalt[b]){
arb[a] = b;
inalt[b] += a;
}else{
arb[b] = a;
inalt[a] += b;
}
}
bool find(int a, int b){
return (gaseste_papa(a) == gaseste_papa(b));
}
void citire(){
for(int i = 1; i <= n; ++i){
arb[i] = i;
inalt[i] = 1;
}
}
int main(){
f >> n >> m;
citire();
for(int i = 0; i < m; ++i){
int op, a, b;
f >> op >> a >> b;
if(op == 1){
union_(a, b);
}else{
if(find(a, b))
g << "DA\n";
else
g << "NU\n";
}
}
return 0;
}