Pagini recente » Clasamentul arhivei Infoarena Monthly | Cod sursa (job #1688119) | Clasament lot2010mixt | Cod sursa (job #2081093) | Cod sursa (job #2629245)
#include <ctype.h>
#include <stdio.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 parent[N+1], children[N+1];
int _find (int x) {
if (!parent[x])
return x;
return parent[x]=_find(parent[x]);
}
void _union (int x, int y) {
x=_find(x);
y=_find(y);
if (x!=y)
if (children[x] > children[y]) {
parent[x] = y;
children[y] += children[x];
}
else {
parent[y] = x;
children[x] += children[y];
}
}
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();
if (k==1)
_union(i, j);
else
puts(_find(i)==_find(j)?"DA":"NU");
}
return 0;
}