Pagini recente » Cod sursa (job #2717700) | Cod sursa (job #2845088) | Cod sursa (job #2802815) | Cod sursa (job #2337639) | Cod sursa (job #1843678)
#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
int FA[NMAX], GR[NMAX];
void init() {
for (int i = 1; i <= n; i++) {
FA[i] = i;
GR[i] = 1;
}
}
int fatherOf(int node) {
int aux;
for (int f = node; FA[f] != f; f = FA[f]);
for (; FA[node] != node;) {
aux = FA[node];
FA[node] = f;
node = aux;
}
return f;
}
void merge(int x, int y) {
int rx = fatherOf(x);
int ry = fatherOf(y);
if (rx != ry) {
if (GR[rx] < GR[ry]) {
FA[rx] = ry;
} else if (GR[rx] > GR[ry]) {
FA[ry] = rx;
} else {
FA[ry] = rx;
GR[rx]++;
}
}
}
void read() {
f >> n >> m;
init();
for (int i = 1; i <= m; i++) {
int t, x, y;
f >> t >> x >> y;
switch (t) {
case 1:
merge(x,y);
break;
case 2:
if (fatherOf(x) == fatherOf(y)) {
g << "DA\n";
} else {
g << "NU\n";
}
break;
default:
cout << "Illegal operation!";
return;
}
}
}
int main() {
read();
f.close();
g.close();
return 0;
}