Pagini recente » Cod sursa (job #2633961) | Cod sursa (job #2484613) | Cod sursa (job #2959296) | Cod sursa (job #447039) | Cod sursa (job #1665404)
#include <cstdio>
using namespace std;
FILE *in,*out;
int h[100001],dad[100001];
int Find(int x);
void Union(int x,int y);
int main()
{
in=fopen("disjoint.in","r");
out=fopen("disjoint.out","w");
int n,q,i,x,y,task;
fscanf(in,"%d%d",&n,&q);
for(i=1;i<=n;++i)h[i]=1;
for(i=1;i<=q;++i)
{
fscanf(in,"%d%d%d",&task,&x,&y);
if(task==2)
{
if(Find(x)==Find(y))fprintf(out,"DA\n");
else fprintf(out,"NU\n");
}
else Union(Find(x),Find(y));
}
fclose(in);fclose(out);
return 0;
}
int Find(int x)
{
int y=x,root;
while(dad[y])y=dad[y];
root=y;
while(dad[x])
{
y=dad[x];
dad[x]=root;
x=y;
}
return root;
}
void Union(int x,int y)
{
if(h[x]>h[y])dad[y]=x;
else dad[x]=y;
if(h[x]==h[y])++h[y];
}