Pagini recente » Cod sursa (job #1687012) | Cod sursa (job #847290) | Cod sursa (job #1626349) | Monitorul de evaluare | Cod sursa (job #2254606)
#include <fstream>
using namespace std;
#define N_MAX 100005
ifstream in { "disjoint.in" };
ofstream out { "disjoint.out" };
int t[N_MAX], rang[N_MAX];
int gaseste(int nod) {
int radacina;
for (radacina = nod; t[radacina] != radacina; radacina = t[radacina]);
for (int f; t[nod] != nod; nod = f) {
f = t[nod];
t[nod] = radacina;
}
return radacina;
}
void uneste(int x, int y) {
if (rang[x] > rang[y]) {
rang[x] += rang[y];
t[y] = x;
} else {
rang[y] += rang[x];
t[x] = y;
}
}
int main() {
int n, m;
in >> n >> m;
for (int i { 1 }; i <= n; ++i) {
t[i] = i;
rang[i] = 1;
}
while (m--) {
int cod, x, y;
in >> cod >> x >> y;
int rad1 { gaseste(x) }, rad2 { gaseste(y) };
if (cod == 1)
uneste(rad1, rad2);
else
out << (rad1 == rad2 ? "DA\n" : "NU\n");
}
}