Pagini recente » Cod sursa (job #530945) | Cod sursa (job #1079106) | Cod sursa (job #518129) | Cod sursa (job #2905810) | Cod sursa (job #2460031)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define ARRAY_MAX 100005
int Level[ARRAY_MAX], Parent[ARRAY_MAX];
int N, M, X, Y, key;
int Root(int K) {
if (Parent[K] == K)
return K;
return Root(Parent[K]);
}
void Merge(int X, int Y) {
if (Root(X) != Root(Y)) {
if (Level[Root(X)] > Level[Root(Y)])
Parent[Root(Y)] = Root(X);
else {
Parent[Root(X)] = Root(Y);
if (Level[Root(X)] == Level[Root(Y)])
Level[Root(Y)]++;
}
}
}
int main() {
fin >> N >> M;
for (int i = 1; i <= N; i++) {
Parent[i] = i;
Level[i] = 1;
}
for (int i = 1; i <= M; i++) {
fin >> key >> X >> Y;
if (key == 1)
Merge(Root(X), Root(Y));
else
if (Root(X) == Root(Y))
fout << "DA\n";
else
fout << "NU\n";
}
}