Pagini recente » Cod sursa (job #2148460) | Cod sursa (job #442082) | Cod sursa (job #618010) | Cod sursa (job #1327882) | Cod sursa (job #2467615)
#include <bits/stdc++.h>
#define inFile "disjoint.in"
#define outFile "disjoint.out"
#define NMAX 100005
using namespace std;
unsigned int T[NMAX],R[NMAX],n,m,x,y,c;
inline void preset(int n);
inline int cauta(int x);
inline void reunite(int x, int y);
int main()
{
freopen(inFile, "r", stdin);
freopen(outFile, "w", stdout);
scanf("%d %d", &n, &m);
preset(n);
for (int i=0;i<m;++i)
{
scanf("%d %d %d", &c, &x, &y);
if (c==1)
{
reunite(x,y);
}
else
{
if (cauta(x)==cauta(y)) printf("DA \n");
else printf("NU \n");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
inline void preset(int n)
{
for (int i=1;i<=n;++i)
{
T[i]=i;
R[i]=1;
}
}
inline int cauta(int x)
{
while(T[x]!=x)
{
x=T[x];
}
return x;
}
inline void reunite(int x, int y)
{
if (R[x]>R[y])
{
T[y]=x;
}
else if (R[x]<R[y])
{
T[x]=y;
}
else
{
R[y]++;
T[x]=y;
}
}