Pagini recente » runda_de_codat_formule | Cod sursa (job #846650) | Cod sursa (job #1971569) | Cod sursa (job #942790) | Cod sursa (job #1233890)
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX=1000007;
int n,tata[MAX],nod[MAX];
int findtata(int x)
{
if (x==tata[x])
return x;
int t=findtata(tata[x]);
tata[x]=t;
return t;
}
bool sameset(int a,int b)
{
return findtata(a)==findtata(b);
}
void reuniune(int a,int b)
{
int ta=findtata(a),tb=findtata(b);
if (nod[tb]>nod[ta])
{
nod[tb]=nod[tb]+nod[ta];
tata[ta]=tb;
}
else
{
nod[ta]=nod[ta]+nod[tb];
tata[tb]=ta;
}
}
int main()
{
freopen ("disjoin.in" , "r" , stdin );
freopen ("disjoin.out" , "w" , stdout );
int x,y,op,p;
scanf ("%d %d " , &n , &p );
for ( int i = 1 ; i <= n ; ++i )
{
tata[i]=i;
nod[i]=1;
}
for ( int i = 1 ; i <= p ; ++i )
{
scanf ("%d %d %d " , &op , &x ,&y );
if (op==1)reuniune(x,y);
else
{
if (sameset(x,y))printf ("DA\n");
else
printf ("NU\n");
}
}
return 0;
}