Pagini recente » Cod sursa (job #1732254) | Cod sursa (job #2623927) | Cod sursa (job #2883950) | Cod sursa (job #1213002) | Cod sursa (job #1451463)
#include <stdio.h>
const int Dim = 100005;
int N,M,P[Dim],R[Dim];
int Find(int X)
{
int Root,aux;
for (Root = X;P[Root] != Root;Root = P[Root]);
while (P[X] != X)
{
aux = P[X];
P[X] = Root;
X = aux;
}
return Root;
}
void Union(int X,int Y)
{
if (R[X] > R[Y])
P[Y] = X;
else
P[X] = Y;
if (R[X] == R[Y]) R[Y]++;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&N,&M);
for (int i = 1;i <= N;i++)
P[i] = i,R[i] = 1;
int Op,X,Y;
for (int i = 1;i <= M;i++)
{
scanf("%d%d%d",&Op,&X,&Y);
switch (Op)
{
case 1:Union(X,Y);break;
case 2:if (Find(X) == Find(Y)) printf("DA\n");
else printf("NU\n");
break;
}
}
return 0;
}