Pagini recente » Cod sursa (job #3168732) | Cod sursa (job #2049674) | Cod sursa (job #2101490) | Cod sursa (job #2881135) | Cod sursa (job #2370039)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int nMax = 100000;
int n, m;
int r[nMax + 5], leg[nMax + 5];
int Find(int nod) {
int rad;
for (rad = nod; rad != leg[rad]; rad = leg[rad]);
while(nod != leg[nod]) {
int aux = leg[nod];
leg[nod] = rad;
nod = aux;
}
return rad;
}
void Unire(int x, int y) {
if (r[x] > r[y])
leg[y] = x;
else
leg[x] = y;
if (r[x] == r[y])
r[y]++;
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++) {
r[i] = 1;
leg[i] = i;
}
for (int i = 1; i <= m; i++) {
int x, y, z;
fin >> x >> y >> z;
if (x == 1) {
int fy = Find(y);
int fz = Find(z);
if (fy != fz)
Unire(fy, fz);
} else {
if (Find(y) == Find(z))
fout << "DA" << '\n';
else
fout << "NU" << '\n';
}
}
return 0;
}