Pagini recente » Cod sursa (job #3264074) | Cod sursa (job #26913) | Cod sursa (job #1152529) | Cod sursa (job #706212) | Cod sursa (job #2477783)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int NMAX = 1e5 + 5;
int N, M, Type, X, Y;
int T[NMAX], Ap[NMAX];
static inline int Find (int Node)
{
if(Node == T[Node])
return Node;
return T[Node] = Find(T[Node]);
}
static inline void Unify (int X, int Y)
{
X = Find(X);
Y = Find(Y);
if(X == Y)
return;
if(Ap[X] > Ap[Y])
{
Ap[X] += Ap[Y];
Ap[Y] = 0;
T[Y] = X;
return;
}
Ap[Y] += Ap[X];
Ap[X] = 0;
T[X] = Y;
return;
}
static inline void Initialize (int N)
{
for(int i = 1; i <= N; ++i)
T[i] = i, Ap[i] = 1;
return;
}
static inline void Solve ()
{
f.tie(NULL);
f >> N >> M;
Initialize(N);
for(int i = 1; i <= M; ++i)
{
f >> Type >> X >> Y;
if(Type == 1)
Unify(X, Y);
else
{
if(Find(X) == Find(Y))
g << "DA";
else g << "NU";
g << '\n';
}
}
return;
}
int main()
{
Solve();
return 0;
}