Pagini recente » Cod sursa (job #2058355) | Cod sursa (job #3154828) | Istoria paginii runda/wellcodesimulareav-11martie | Cod sursa (job #2080729) | Cod sursa (job #2000409)
#include <fstream>
#include <iostream>
#define MAXSZ 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, T[MAXSZ], m;
int sz[MAXSZ];
int findSet(int x) {
//
if (T[x] == x) return x;
T[x] = findSet(T[x]);
return T[x];
}
void join(int x, int y) {
//
int set1 = findSet(x);
int set2 = findSet(y);
if (set1 != set2) {
if (sz[set1] < sz[set2]) {
T[set1] = set2;
}
else {
T[set2] = set1;
}
int aux = sz[set1];
sz[set1] += sz[set2];
sz[set2] += aux;
}
}
bool checkSameSet(int x, int y) {
//
int set1 = findSet(x);
int set2 = findSet(y);
return (set1 == set2);
}
void init(int n) {
//
for (int i = 1; i <= n; i++) {
T[i] = i;
sz[i] = 1;
}
}
int main() {
//
f >> n >> m;
init(n);
for (int i = 1; i <= m; i++) {
//
int op, x, y;
f >> op >> x >> y;
switch (op) {
case 1:
join(x, y);
break;
case 2:
bool same = checkSameSet(x, y);
g << (same ? "DA" : "NU") << endl;
break;
}
}
}