Pagini recente » Cod sursa (job #246144) | Cod sursa (job #403563) | Cod sursa (job #2291169) | Cod sursa (job #130204) | Cod sursa (job #565757)
Cod sursa(job #565757)
#include <stdio.h>
const long NMAX=100010;
long n, m, p[NMAX], h[NMAX], x, y, t;
void makeSet(int u);
int findSet(int u);
void setUnion(int u, int v);
int main()
{
long i, j, temp;
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%ld%ld", &n, &m);
for (i=1; i<=n; i++)
makeSet(i);
for (i=0; i<m; i++)
{
scanf("%ld%ld%ld", &t, &x, &y);
if (t==1)
setUnion(x, y);
if (t==2)
if (findSet(x)==findSet(y))
printf("DA\n");
else
printf("NU\n");
}//for i
return 0;
}//main
void makeSet(int u)
{
p[u]=0;
h[u]=0;
}//makeSet
int findSet(int u)
{
if(p[u]==0)
return u;
p[u]=findSet(p[u]);
return p[u];
}//findSet
void setUnion(int u, int v)
{
u=findSet(u);
v=findSet(v);
if (h[u]>h[v])
p[v]=u;
else
{
p[u]=v;
if (h[u]==h[v])
h[v]++;
}//else
}//setUnion