Pagini recente » Cod sursa (job #2898529) | Cod sursa (job #502550) | Cod sursa (job #1838117) | Cod sursa (job #2422869) | Cod sursa (job #657629)
Cod sursa(job #657629)
#include<stdio.h>
#define NMAX 100100
int dad[NMAX], R[NMAX];
int search(int nod)
{
int aux = nod, tata;
while(nod != dad[nod])
nod = dad[nod];
tata = nod;
nod = aux;
while(nod != tata)
{
aux = dad[nod];
dad[nod] = tata;
nod = aux;
}
return tata;
}
void unite(int nod1, int nod2)
{
if(R[nod1] >= R[nod2])
{
dad[nod2] = nod1;
if(R[nod1] == R[nod2])
R[nod1] ++;
}
else
dad[nod1] = nod2;
}
int main()
{
int N, M, tip, x, y, i, DadX, DadY;
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
scanf("%d%d", &N, &M);
for(i = 1; i <= N; i ++)
dad[i] = i, R[i] = 1;
while(M --)
{
scanf("%d%d%d", &tip, &x, &y);
DadX = search(x);
DadY = search(y);
if(tip == 1)
unite(DadX, DadY);
if(tip == 2)
printf("%s\n", DadX == DadY ? "DA" : "NU");
}
return 0;
}