Pagini recente » Cod sursa (job #1279914) | Cod sursa (job #10091) | Cod sursa (job #1488321) | Cod sursa (job #2941440) | Cod sursa (job #2741129)
#include <bits/stdc++.h>
#define ll long long
#define for1 (n) for (int i = 1; i <= n; ++i)
#define for0 (n) for (int i = 0; i < n; ++i)
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int maxN = 1e5 + 5;
int n, m, rang[maxN], tata[maxN];
int radacina(int x) {
int Radacina;
for (Radacina = x; Radacina != tata[Radacina]; Radacina = tata[Radacina]);
while (x != Radacina) {
tata[x] = Radacina;
x = tata[x];
}
return Radacina;
}
void reuniune(int x, int y) {
if (rang[x] > rang[y]) {
tata[y] = x;
}
else {
tata[x] = y;
}
if (rang[x] == rang[y]) {
rang[y]++;
}
}
int main() {
fin.tie(0); fout.tie(0);
fin >> n >> m;
for (int i= 1; i <= n; ++i) {
rang[i] = 1;
tata[i] = i;
}
while (m--) {
int type, x, y; fin >> type >> x >> y;
if (type == 1) {
reuniune(radacina(x), radacina(y));
}
else {
fout << (radacina(x) == radacina(y) ? "DA\n" : "NU\n");
}
}
return 0;
}