Pagini recente » Cod sursa (job #2460314) | Cod sursa (job #2554455) | Cod sursa (job #954132) | Cod sursa (job #2745299) | Cod sursa (job #529762)
Cod sursa(job #529762)
#include <fstream>
using namespace std;
#define NMAX 100000
struct elem { int id, rank, parent; };
ifstream f("disjoint.in"); ofstream g("disjoint.out");
elem sets[NMAX];
int set_find(int x) {
while (sets[x].parent != x) x = sets[x].parent;
return x;
}
void set_union(int x, int y) {
int r1 = set_find(x);
int r2 = set_find(y);
if (sets[r1].rank < sets[r2].rank) {
sets[r1].parent = r2;
}
else {
sets[r2].parent = r1;
if (sets[r1].rank == sets[r2].rank) {
sets[r1].rank++;
}
}
}
int main() {
int N, M, cod, x, y;
f>>N>>M;
for (int i=1;i<=N;i++) {
sets[i].id = sets[i].parent = i;
sets[i].rank = 0;
}
for (int i=1;i<=M;i++) {
f>>cod>>x>>y;
if (cod == 1) {
set_union(x,y);
}
else {
if (set_find(x) == set_find(y)) {
g<<"DA\n";
}
else g<<"NU\n";
}
}
f.close(); g.close(); return 0;
}