Pagini recente » Cod sursa (job #3195401) | Cod sursa (job #405085) | Cod sursa (job #365133) | Cod sursa (job #55083) | Cod sursa (job #2459809)
#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] == 0)
return K;
else {
Parent[K] = Root(Parent[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;
if (key == 1)
Merge(Root(X), Root(Y));
else
if (Root(X) == Root(Y))
fout << "DA\n";
else
fout << "NU\n";
}
}