Pagini recente » Cod sursa (job #1012440) | Cod sursa (job #257246) | Istoria paginii runda/test321/clasament | Cod sursa (job #1266819) | Cod sursa (job #2960917)
#include <fstream>
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n,m,t[100010],rg[100010],i,q,x,y;
int cautare(int nod)
{
int r;
r=nod;
while(t[r]!=r)
r=t[r];
while(t[nod]!=nod)
{
nod=t[nod];
t[nod]=r;
}
return r;
}
void unire(int x,int y)
{
if(rg[x]>rg[y])
t[y]=x;
else
t[x]=y;
if(rg[x]==rg[y])
rg[x]++;
}
int main()
{
cin>>n>>m;
for(i=1;i<=n;i++)
t[i]=i,rg[i]=1;
for(i=1;i<=m;i++)
{
cin>>q>>x>>y;
if(q==1)
{
unire(cautare(x),cautare(y));
}
if(q==2)
{
if(cautare(x)==cautare(y))
cout<<"DA\n";
else
cout<<"NU\n";
}
}
return 0;
}