Pagini recente » Cod sursa (job #1042152) | Profil Pelikanos | Cod sursa (job #1499865) | Cod sursa (job #1126501) | Cod sursa (job #1548950)
#include <iostream>
#include <stdio.h>
#define NMAX 100020
using namespace std;
int TT[NMAX], RG[NMAX];
int Find(int x){
int R=x;
int y;
while(TT[R]!=R){
R=TT[R];
}
//Path compression
while(TT[x]!=x){
y=TT[x];
TT[x]=R;
x=y;
}
return R;
}
void Union(int a, int b){
if(RG[a]>RG[b]){
TT[b]=a;
}
else {
TT[a]=b;
}
if(RG[a]==RG[b])
{
TT[a]=b;
RG[a]++;
}
}
int main()
{
int N,M;
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d %d ", &N, &M);
int i, x, y, cd;
for(i=0;i<N;i++){
TT[i]=i;
RG[i]=1;
}
for(i=0;i<M;i++){
scanf("%d %d %d", &cd, &x, &y);
if (cd == 2){
if (Find(x) == Find(y)) printf("DA\n");
else printf("NU\n");
}
else
{
if (Find(x) == Find(y)) {fprintf(stderr,"%d ", i);return 0;}
Union(Find(x), Find(y));
}
}
return 0;
}