Pagini recente » Cod sursa (job #2670407) | Cod sursa (job #1370886) | Cod sursa (job #1876623) | Cod sursa (job #378120) | Cod sursa (job #2460516)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
#define nmax 1000005
int n,rang[nmax],mul[nmax];
int Find(int x)
{
int R,y;
for(R=x; R!=mul[R]; R=mul[R]);
//R este adresa multimii care contine elementul x
while(mul[x]!=x)
{
y=mul[x];
mul[x]=R;
x=y;
}
return R;
}
void Unite(int x, int y)
{
if(rang[x]<rang[y])
mul[x]=y;
else
mul[y]=x;
if(rang[x]==rang[y])
rang[y]++;
/*if (rang[x] > rang[y])
mul[y] = x;
else mul[x] = y;
if (rang[x] == rang[y]) rang[y]++;*/
}
void test()
{
int i;
for(i=1; i<=n; i++)
cout<<Find(i)<<" ";
}
int main()
{
int i,t,x,y,m;
cin>>n>>m;
for(i=1; i<=n; i++)
{
rang[i]=1;
mul[i]=i;
}
for(i=1; i<=m; i++)
{
cin>>t>>x>>y;
if(t==2)
{
if(Find(x)==Find(y))
cout<<"DA";
else
cout<<"NU";
cout<<endl;
}
else
Unite(Find(x),Find(y));
}
return 0;
}