Pagini recente » Cod sursa (job #151833) | Cod sursa (job #2171066) | Cod sursa (job #2269284) | Cod sursa (job #64329) | Cod sursa (job #2558708)
#include <fstream>
#define NMAX 100005
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int n, m;
int marime[NMAX], tata[NMAX];
int gasesteRadacina(int x) {
int r = x, y;
// caut radacina
while (tata[r] != r)
r = tata[r];
// compresia drumurilor
while (tata[x] != x) {
y = tata[x];
tata[x] = r;
x = y;
}
return r;
}
void uneste(int rx, int ry) {
// unesc arborul mai mic la cel mai mare
if (marime[rx] > marime[ry]) {
tata[ry] = rx;
marime[rx] += marime[ry];
} else {
tata[rx] = ry;
marime[ry] += marime[rx];
}
}
int main() {
int i, o, x, y, rx, ry;
fin >> n >> m;
// initializez vectorii
for (i = 1; i <= n; i++) {
tata[i] = i;
marime[i] = 1;
}
for (i = 1; i <= m; i++) {
fin >> o >> x >> y;
rx = gasesteRadacina(x);
ry = gasesteRadacina(y);
if (o == 2) {
if (rx == ry)
fout << "DA" << '\n';
else
fout << "NU" << '\n';
} else {
if (rx != ry)
uneste(rx, ry);
}
}
fin.close();
fout.close();
return 0;
}