Pagini recente » Cod sursa (job #2245317) | Cod sursa (job #1448494) | Cod sursa (job #642184) | Cod sursa (job #2675207) | Cod sursa (job #893035)
Cod sursa(job #893035)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
#define Nmax 100010
int N, M, Size[Nmax], Father[Nmax], T, X, Y;
int Find_Root(int X)
{
int P, Y;
for(P = X; P != Father[P]; P = Father[P]);
for(; X != Father[X]; )
{
Y = Father[X];
Father[X] = P;
X = Y;
}
return P;
}
void Merge(int X, int Y)
{
if(Size[X] > Size[Y])
{
Father[Y] = X;
Size[X] += Size[Y];
}else
{
Father[X] = Y;
Size[Y] += Size[X];
}
}
int main()
{
freopen("disjoint.in", "r", stdin);
freopen("disjoint.out", "w", stdout);
int i;
scanf("%i %i", &N, &M);
for(i = 1; i <= N; ++ i) Father[i] = i, Size[i] = 1;
for(i = 1; i <= M; ++ i)
{
scanf("%i %i %i", &T, &X, &Y);
if(T == 1)
{
if(Find_Root(X) != Find_Root(Y))
Merge(Find_Root(X), Find_Root(Y));
}else
{
if(Find_Root(X) != Find_Root(Y))
printf("NU\n");
else
printf("DA\n");
}
}
return 0;
}