Pagini recente » Cod sursa (job #17334) | Cod sursa (job #2136688) | Cod sursa (job #2050472) | Cod sursa (job #2949858) | Cod sursa (job #234470)
Cod sursa(job #234470)
#include<stdio.h>
FILE*fin=fopen("disjoint.in","r");
FILE*fout=fopen("disjoint.out","w");
#define maxn 100001
int n,m;
int t[maxn],ad[maxn];
int find(int x)
{
int y=x,z;
while(t[y]) y=t[y];
while(t[x])
{
z=t[x];
t[x]=y;
x=z;
}
t[y]=0;
return y;
}
void unite(int x,int y)
{
if(ad[x]>ad[y]) t[y]=x;
else t[x]=y;
if(ad[x]==ad[y]) ad[y]++;
}
int main()
{
int i;
int op,x,y;
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++)
{
t[i]=0;
ad[i]=0;
}
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&op,&x,&y);
if(op==2)
{
if(find(x)==find(y)) fprintf(fout,"DA\n");
else fprintf(fout,"NU\n");
}
else unite(find(x),find(y));
}
return 0;
}