Pagini recente » Cod sursa (job #1960887) | Cod sursa (job #1975953) | Borderou de evaluare (job #617811) | Cod sursa (job #323204) | Cod sursa (job #2908597)
#include <bits/stdc++.h>
using namespace std;
#define MAX 100000
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, q, c, a, b, t[MAX], lg[MAX];
int rad(int n){
while(t[n] != n){
t[n] = rad(t[n]);
return t[n];
}
return n;
}
void uneste(int a ,int b){
int ar = rad(a);
int br = rad(b);
if(lg[ar] > lg[br]) t[br] = ar, lg[ar] += lg[br];
else t[ar] = br, lg[ar] += lg[br];
}
int main(){
fin >> n >> q;
for(int i = 1; i <= n; i++)
t[i] = i , lg[i] = 1;
while(q--){
fin >> c >> a >> b;
if(c == 1){
uneste(a, b);
}
else{
int ar = rad(a);
int br = rad(b);
if(ar == br) fout << "DA" << '\n';
else fout << "NU" << '\n';
}
}
}