Pagini recente » Cod sursa (job #1308774) | Cod sursa (job #2197005) | Cod sursa (job #1632145) | Cod sursa (job #334898) | Cod sursa (job #2629233)
#include <stdio.h>
#include <ctype.h>
#define N 100000
int read () {
int ch;
while (!isdigit(ch=getchar()));
int ans=0;
do
ans = (ans<<3) + (ans<<1) + ch - '0';
while (isdigit(ch=getchar()));
return ans;
}
int t[N+1], r[N+1];
int _find (int x) {
if (!t[x])
return x;
return t[x]=_find(t[x]);
}
void _union (int x, int y) {
int p1=_find(x),
p2=_find(y);
if (r[p1] > r[p2])
t[p2]=p1;
else
t[p1]=p2;
if (r[p1]==r[p2])
++r[p2];
}
int main () {
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int n, m;
n=read(), m=read();
int i, j, k;
for (; m; m--) {
k=read(), i=read(), j=read();
k==1 ? _union(i, j) : (void)puts(_find(i) == _find(j)?"DA":"NU");
}
return 0;
}