Pagini recente » Cod sursa (job #713193) | Cod sursa (job #2823629) | Cod sursa (job #2054570) | Cod sursa (job #1566381) | Cod sursa (job #529764)
Cod sursa(job #529764)
#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) {
if (x==sets[x].parent) return x;
int r = set_find(sets[x].parent);
sets[x].parent = r;
return r;
}
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;
}