Pagini recente » Cod sursa (job #981587) | Cod sursa (job #3248340) | Profil ana_are_mere1997 | Monitorul de evaluare | Cod sursa (job #418327)
Cod sursa(job #418327)
#include <cstdio>
#define IN "disjoint.in"
#define OUT "disjoint.out"
#define NMAX 100100
int N, M;
int TT[NMAX], RG[NMAX];
int find(int x)
{
int r, aux;
for(r = x ; TT[r] != r ; r = TT[r]);
while(TT[x] != x)
{
aux = TT[x];
TT[x] = r;
x = aux;
}
}
void unite(int x ,int y)
{
if(RG[x] > RG[y])
TT[y] = x;
else
TT[x] = y;
if(RG[x] == RG[y])
RG[y]++;
}
int main()
{
int ide, x, y;
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
scanf("%d%d",&N,&M);
for(int i = 1 ; i <= N ; i++)
{
RG[i] = 1;
TT[i] = i;
}
for(int i = 1 ; i <= M ; i++)
{
scanf("%d%d%d",&ide,&x,&y);
if(ide == 2)
{
if(find(x) == find(y))
printf("DA\n");
else
printf("NU\n");
}
else
unite(find(x), find(y));
}
return 0;
}