Pagini recente » Cod sursa (job #3285495) | Cod sursa (job #1826909) | Cod sursa (job #1247387) | Cod sursa (job #2380741) | Cod sursa (job #1392458)
/*#include <fstream>
#include <cstdio
using namespace std;
int find(int x){
if(x==t[x])return x;
else t[x]=find(t[x]);}
int reunire(int x,int y){
x=find(x);
y=find(y);
if(rang[x]>rang[y])t[y]=x;
else
if(rang[y]>rang[x])t[x]=y;
else {
rang[x]++;t[y]=x;}}
int main()
{
freopen("disjunt.in","r",stdin);
ofstream g ("disjunt.out");
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
t[i]=i;
for(i=1;i<=m;i++)
scanf("%d%d%d",&)*/
#include <cstdio>
using namespace std;
int n,que,t[100005],rang[100005],x,y,i,instr;
int findd(int x)
{
if (t[x]==x)return x;
else t[x]=findd(t[x]);
}
void uneste(int x,int y)
{
x=findd(x);
y=findd(y);
if (rang[x]>rang[y])t[y]=x;
else if (rang[x]<rang[y])t[x]=y;
else
{
rang[x]++;
t[y]=x;
}
return ;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d\n",&n,&que);
for (i=1; i<=n; i++)
t[i]=i,rang[i]=1;
for (i=1; i<=que; i++)
{
scanf("%d %d %d\n",&instr,&x,&y);
if (instr==1)
{
uneste(x,y);
}
else
{
if (findd(x)==findd(y))printf("DA\n");
else printf("NU\n");
}
}
return 0;
}