Pagini recente » Cod sursa (job #2307259) | Statistici Toth Iulia (tothiulia.) | Cod sursa (job #954144) | Monitorul de evaluare | Cod sursa (job #1189455)
#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
void Union (int x, int y, int *size, int *parent) {
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 *parent) {
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.in");
ofstream out;
out.open("disjoint.out");
int n, m, cod, nr1, nr2, i;
int *parent, * size;
in >> n >> m;
parent = (int*)calloc(n + 1 , sizeof(int));
size = (int*)malloc(n + 1 * sizeof(int));
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,size,parent);
else {
if (Find(nr1,parent) == Find(nr2,parent))
out << "DA" << "\n";
else
out << "NU" << "\n";
}
}
in.close();
out.close();
free(parent);
free(size);
return 0;
}