Pagini recente » Cod sursa (job #2990661) | Cod sursa (job #2379650) | Cod sursa (job #2626996) | Cod sursa (job #2260267) | Cod sursa (job #1766275)
#include <stdio.h>
int parent[100009],rang[100009],k,i,n,m,x,y;
int find(int x)
{
int r=x;
while (r!=parent[r])
r=parent[r];
while (x!=parent[x])
{
k=parent[x];
parent[x]=r;
x=k;
}
return r;
}
void _union(int x,int y)
{
x=find(x);
y=find(y);
if (x!=y)
{
if (rang[x]<rang[y])
parent[x]=y; else
parent[y]=x;
if (rang[x]==rang[y])
rang[x]++;
}
}
int main(int argc, char const *argv[])
{
freopen("disjoint.in","r",stdin);
freopen("disjoint.out","w",stdout);
scanf("%d%d",&n,&m);
for (i=1;i<=n;i++)
parent[i]=i;
while (m--)
{
scanf("%d%d%d",&k,&x,&y);
if (k==1)
_union(x,y); else
{
if (find(x)==find(y))
puts("DA"); else
puts("NU");
}
}
fclose(stdin);
fclose(stdout);
return 0;
}