Pagini recente » Cod sursa (job #1056292) | Cod sursa (job #2344590) | Cod sursa (job #342598) | Cod sursa (job #1129808) | Cod sursa (job #2936630)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
void MakeSet(int u, int parent[], int h[]) {
parent[u] = 0;
h[u] = 0;
}
int Find(int u, int parent[]) {
if (parent[u] == 0) return u;
parent[u] = Find(parent[u], parent);
return parent[u];
}
void Union(int u, int v, int parent[], int h[]) {
int repU = Find(u, parent);
int repV = Find(v, parent);
if (h[repU] > h[repV]) {
parent[repV] = repU;
} else {
parent[repU] = repV;
if (h[repU] == h[repV]) h[repV]++;
}
}
int main() {
int parent[100000] = {0}, h[100000] = {0};
int m, n, x, y, code;
in >> n >> m;
for (int i = 1; i <= n; i++)
MakeSet(i, parent, h);
for (int i = 1; i <= m; i++) {
in >> code >> x >> y;
if (code == 1) {
Union(x, y, parent, h);
} else {
if (Find(x, parent) == Find(y, parent))
out << "DA" << endl;
else
out << "NU" << endl;
}
}
return 0;
}