Pagini recente » Diferente pentru problema/suma intre reviziile 14 si 9 | Cod sursa (job #2541414) | Cod sursa (job #1550394) | Cod sursa (job #1534295) | Cod sursa (job #1914438)
#include <iostream>
#include <fstream>
using namespace std;
int nod,tata[100001],h[100001],r1,r2,n,m,i,t,x,y;
int radacina(int x)
{
nod=x;
while(tata[x]!=x)
x=tata[x];
return tata[x];
}
void unit(int x, int y)
{
if(h[r1]>h[r2])
tata[r2]=r1;
else
tata[r1]=tata[r2];
if(h[r1]==h[r2])
h[r1]++;
}
int main()
{freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++)
{tata[i]=i;
h[i]=1;}
for(i=1; i<=m; i++)
{
scanf("%d%d%d", &t, &x, &y);
if(t==1)
{
r1=radacina(x);
r2=radacina(y);
unit(r1,r2);
}
else
{r1=radacina(x);
r2=radacina(y);
if(r1==r2)
printf("DA\n");
else
printf("NU\n");}
}
return 0;
}