Pagini recente » Cod sursa (job #2793793) | Profil benny | Cod sursa (job #1455791) | Cod sursa (job #1378051) | Cod sursa (job #3310731)
#include <fstream>
const int MNMAX = 100000;
struct DSU {
int n;
int head[MNMAX];
DSU(int n) {
int i;
this->n = n;
for (i = 0; i < n; ++i) {
head[i] = i;
}
}
int find(int i) {
if (head[i] == i)
return i;
return head[i] = find(head[i]);
}
void unite(int dom, int sub) {
head[find(sub)] = find(dom);
}
} *d;
using namespace std;
int main() {
ifstream fin;
ofstream fout;
int n, m, i, op, x, y;
fin.open("disjoint.in");
fin >> n >> m;
d = new DSU(n);
fout.open("disjoint.out");
for (i = 0; i < m; ++i) {
fin >> op >> x >> y;
--x;
--y;
switch (op) {
case 1:
d->unite(x, y);
break;
case 2:
fout << (d->find(x) == d->find(y) ? "DA\n" : "NU\n");
}
}
fin.close();
fout.close();
return 0;
}