Pagini recente » Cod sursa (job #2049002) | Cod sursa (job #669886) | Cod sursa (job #1190065) | Cod sursa (job #2044579) | Cod sursa (job #2819252)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
#define NMAX 100005
int n, m, tata[NMAX], adan[NMAX];
void initializare() {
for (int i = 1; i <= n; i++)
tata[i] = i;
}
int radacina(int x) {
if (tata[x] == x)
return x;
int rad = radacina(tata[x]);
tata[x] = rad;
return rad;
}
void reunire(int x, int y) {
int rad1 = radacina(x), rad2 = radacina(y);
if (adan[rad1] < adan[rad2]) {
tata[rad2] = rad1;
adan[rad1] = max(adan[rad1], adan[rad2] + 1);
} else {
tata[rad1] = rad2;
adan[rad2] = max(adan[rad2], adan[rad1] + 1);
}
}
void rezolvare() {
int cod, x, y;
for (int i = 1; i <= m; i++) {
f >> cod >> x >> y;
if (cod == 1)
reunire(x, y);
else if (radacina(x) == radacina(y))
g << "DA\n";
else
g << "NU\n";
}
}
int main() {
f >> n >> m;
initializare();
rezolvare();
return 0;
}