Pagini recente » Cod sursa (job #578891) | Monitorul de evaluare | Profil NuSuntRoman | Diferente pentru preoni-2007/runda-2/solutii intre reviziile 26 si 27 | Cod sursa (job #1981331)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
int dad[NMAX], elem_number[NMAX];
inline void reuniune(int x, int y) {
while (x != dad[x])
x = dad[x];
while (y != dad[y])
y = dad [y];
if (elem_number[x] <= elem_number[y]){
elem_number[x] += elem_number[y];
dad[y] = x;
}
else {
elem_number[y] += elem_number[x];
dad[x] = y;
}
return;
}
inline bool request(int x, int y){
int aux, xx = x, yy = y;
while (x != dad[x])
x = dad[x];
while (xx != x){
aux = dad[xx];
dad[xx] = x;
xx = aux;
}
while (y != dad[y])
y = dad[y];
while (yy != y){
aux = dad[yy];
dad[yy] = y;
yy = aux;
}
return x == y;
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m, type, x, y;
f >> n >> m;
for (int i = 1; i <= n; i++)
dad[i] = i, elem_number[i] = 1;
for (int i = 0; i < m; i++) {
f >> type >> x >> y;
if (type == 1)
reuniune(x, y);
else
if (request(x, y) == 0)
g << "NU\n";
else
g << "DA\n";
}
f.close();
g.close();
return 0;
}