Pagini recente » Cod sursa (job #1028591) | Cod sursa (job #1728020) | Cod sursa (job #1026595) | Cod sursa (job #1671454) | Cod sursa (job #1128147)
#include <iostream>
#include <fstream>
#define IN "disjoint.in"
#define OUT "disjoint.out"
#define NMAX 100005
using namespace std;
ifstream in(IN);
ofstream out(OUT);
int n, m, tata[NMAX], rang[NMAX], cod;
inline int cauta(int a)
{
int rad=a, aux;
while(tata[rad] != rad)
rad=tata[rad];
while(tata[a] != rad)
aux=tata[a],
tata[a]=rad,
a=aux;
return rad;
}
inline void uneste(int a, int b)
{
if(rang[a] > rang[b])
tata[b]=a;
else
{
if(rang[a]==rang[b])
++rang[b];
tata[a]=b;
}
}
int main()
{
int i;
in>>n>>m;
for(i=1; i<=n; ++i)
rang[i]=1, tata[i]=i;
while(m--)
{
int a, b;
in>>cod>>a>>b;
if(cod==2)
if(cauta(a) == cauta(b))
out<<"DA\n";
else out<<"NU\n";
else
uneste(a, b);
}
in.close();
out.close();
return 0;
}