Pagini recente » Cod sursa (job #2664118) | Cod sursa (job #3279960) | Cod sursa (job #1910688) | Cod sursa (job #2266422) | Cod sursa (job #3265001)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int tata[100005],h[100005];
int FindSet(int a){
int x = a;
while (tata[x]!=x){
x = tata[x];
}
int y = a;
while (tata[y]!=y){
int cp = tata[y];
tata[y] = x;
y = cp;
}
return x;
}
void UniteSet(int a, int b){
int x = FindSet(a);
int y = FindSet(b);
if (h[x]==h[y]){
h[x]++;
tata[y] = x;
}else if (h[x]>h[y]) tata[y] = x;
else tata[x] = y;
}
int main()
{
int n,m;
fin >> n >> m;
for (int i=1;i<=n;++i){
tata[i] = i;
h[i] = 1;
}
for (int i=1;i<=m;++i){
int C,x,y;
fin >> C >> x >> y;
if (C==1){
UniteSet(x,y);
}else{
if (FindSet(x)==FindSet(y)) fout << "DA\n";
else fout << "NU\n";
}
}
return 0;
}