Pagini recente » Monitorul de evaluare | Borderou de evaluare (job #928109) | Cod sursa (job #1189459)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100020
int parent[NMAX];
int size[NMAX];
void Union (int x, int y) {
if (size[parent[x]] > size[parent[y]]) {
parent[y] = x;
size[x] += size[y];
}
else {
parent[x] = y;
size[y] += size[x];
}
}
int Find (int x) {
int x_copy = x;
while (parent[x] > 0)
x = parent[x];
while (parent[x_copy] > 0) {
int x_prec = x_copy;
x_copy = parent[x_copy];
parent[x_prec] = x;
}
return x;
}
int main() {
ifstream in;
in.open("disjoint.txt");
ofstream out;
out.open("disjoint.out");
int n, m, cod, nr1, nr2, i;
in >> n >> m;
for (i = 1; i <= n; i++)
size[i] = 1;
for (i = 0; i < m; i++) {
in >> cod >> nr1 >> nr2;
if (cod == 1)
Union(nr1,nr2);
else {
if (Find(nr1) == Find(nr2))
out << "DA" << "\n";
else
out << "NU" << "\n";
}
}
in.close();
out.close();
return 0;
}