Pagini recente » Cod sursa (job #832206) | Cod sursa (job #1315221) | Cod sursa (job #2085560) | Cod sursa (job #1218171) | Cod sursa (job #1396283)
#include <stdio.h>
#include <vector>
using namespace std;
std::vector< int > tata,h;
int n,q,x,a,b,Ra,Rb;
void Union_R(int x0,int y0)
{
if(h[x0]>h[y0])tata[y0] = x0;
else if(h[x0]<h[y0])tata[x0] = y0;
else
{
++h[x0];
tata[y0] = x0;
}
}
int Find_R(int x0)
{
int rad = x0,aux;
while(tata[rad]!=rad)rad = tata[rad];
while(tata[x0]!=rad)
{
aux = tata[x0];
tata[x0] = rad;
x0 = aux;
}
return rad;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d",&n,&q);
tata.resize(n+1);
h.resize(n+1);
for(int i=1;i<=n;++i)tata[i] = i;
for(int i=1;i<=q;++i)
{
scanf("%d %d %d",&x,&a,&b);
Ra = Find_R(a);
Rb = Find_R(b);
if(x==1)
{
Union_R(Ra,Rb);
}
else
{
if(Ra==Rb)printf("DA\n");
else printf("NU\n");
}
}
return 0;
}