Pagini recente » Cod sursa (job #2881384) | Cod sursa (job #1433447) | Cod sursa (job #1730719) | Cod sursa (job #1583621) | Cod sursa (job #2809518)
#include <iostream>
#define dmax 1000000
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n,m,t[dmax+1],rang[dmax+1];
int radacina(int k)
{
int x=k,tata;
while(t[k]!=k)
k=t[k];
while(x!=k)
tata=t[x],t[x]=k,x=tata;
return k;
}
void unire(int x,int y)
{
t[y]=x;
rang[x]+=rang[y];
}
int main()
{
int rx,ry,x,y,p,pr;
cin>>n>>m;
for(int i=1; i<=n; i++)
t[i]=i;
for(int i=1; i<=n; i++)
rang[i]=1;
for(int i=1; i<=m; i++)
{
cin>>p;
if(p==1)
{
cin>>x>>y;
if(x>y)
swap(x,y);
rx=radacina(x),ry=radacina(y);
if(rx!=ry)
unire(rx,ry);
}
else
{
cin>>x>>y;
if(radacina(x)==radacina(y))
cout<<"DA"<<'\n';
else
cout<<"NU"<<'\n';
}
}
}