Pagini recente » Cod sursa (job #93694) | Cod sursa (job #359943) | Cod sursa (job #1549830) | Cod sursa (job #2198289) | Cod sursa (job #402865)
Cod sursa(job #402865)
#include<stdio.h>
#define Nmax 100010
int T[Nmax],H[Nmax],i,n,m,x,y,op,Tx,Ty;
int find (int x)
{
int R=x,y;
for(; R!=T[R]; R=T[R]);
// compresia drumurilor
for(; x!=T[x]; )
{
y=T[x];
T[x]=R;
x=y;
}
return R;
}
void uneste (int x, int y)
{
if(H[x]>=H[y]) T[y]=x;
else T[x]=y;
if(H[x]==H[y]) H[x]++;
}
int main()
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
T[i]=i;
H[i]=1;
}
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&op,&x,&y);
if(op==2)
{
if( find(x) == find(y) ) printf("DA\n");
else printf("NU\n");
}
else
{
Tx=find(x);
Ty=find(y);
uneste(Tx,Ty);
}
}
return 0;
}