Pagini recente » Cod sursa (job #84418) | Cod sursa (job #1771273)
#include <iostream>
#include <cstdio>
using namespace std;
const int Nmax=200005;
int n,m,tata[Nmax],adancime[Nmax];
int radacina(int x)
{
while(x!=tata[x])
x=tata[x];
return x;
}
void compresie(int x, int y)
{
int a;
while(tata[y] != y)
{
a= y;
y=tata[y];
tata[a] = x;
}
}
void reuniune(int x, int y)
{
if(adancime[x] == adancime[y])
{
tata[radacina(y)] = radacina(x);
adancime[x]++;
return;
}
if(adancime[x] < adancime[y])
{
tata[radacina(x)] = radacina(y);
compresie(y,x);
}
else
{
tata[radacina(y)] = radacina(x);
compresie(x,y);
}
}
void citire()
{
scanf("%d%d",&n,&m);
int cerinta;
for(int i=1;i<=n;i++)
{
tata[i]=i;
adancime[i]=1;
}
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d%d",&cerinta,&x,&y);
if(cerinta==1)
{
reuniune(x,y);
}
else
{
if(radacina(x)==radacina(y))
printf("DA\n");
else
printf("NU\n");
}
}
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
citire();
//cout << "Hello world!" << endl;
return 0;
}