Pagini recente » Cod sursa (job #988255) | Cod sursa (job #1659611) | Cod sursa (job #2060652) | Cod sursa (job #2364336) | Cod sursa (job #2467621)
#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)
{
int r=x,y;
while(T[r]!=r)
{
r=T[r];
}
while (T[x]!=x)
{
y = T[x];
T[x]=r;
x=y;
}
return r;
}
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;
}
}