Pagini recente » Cod sursa (job #559430) | Cod sursa (job #1054943) | Cod sursa (job #1637468) | Cod sursa (job #1953066) | Cod sursa (job #1239698)
#include<cstdio>
using namespace std;
int i, a[100005], grad[100005], n, op, x, y, m;
int find(int x){
int i=x, y;
while (a[i]!=i) i=a[i];
while (a[x]!=x) {
y=a[x];
a[x]=i;
x=y;
}
return i;
}
void unite(int x, int y){
if (grad[x]>grad[y]) a[x]=y; else a[y]=x;
if (grad[x]==grad[y]) grad[x]++;
}
int main(){
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d", &n, &m);
for (i=1;i<=n;i++) {a[i]=i; grad[i]=1;}
for (i=1;i<=m;i++) {
scanf("%d%d%d", &op, &x, &y);
if (op==1) unite(find(x), find(y));
if (op==2) {
if (find(x)==find(y)) printf("DA\n"); else printf("NU\n");
}
}
return 0;
}