Pagini recente » Cod sursa (job #69744) | Cod sursa (job #3211554) | Monitorul de evaluare | Cod sursa (job #2279670) | Cod sursa (job #2686413)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
int dad[100041];
int hai[100041];
int dan(int a){
if(a != dad[a]){
dad[a] = dan(dad[a]);
}
return dad[a];
}
void pakpak(int a, int b){
dad[b] = a;
hai[a] += hai[b];
}
void uni(int a, int b){
a = dan(a);b = dan(b);
if(hai[a] >= hai[b]){
pakpak(a, b);
}else{
pakpak(b, a);
}
}
bool inu(int a, int b){
return dan(a) == dan(b);
}
int main(){
// ios_base::sync_with_stdio(false);
fin >> n >> m;
for(int i = 1; i <= n; ++i){
dad[i] = i;
hai[i] = 1;
}
for(int i = 0; i < m; ++i){
int op, a, b;
fin >> op >> a >> b;
if(op == 1){
uni(a, b);
}else{
if(inu(a, b)){
fout << "DA\n";
}else{
fout << "NU\n";
}
}
}
return 0;
}