Pagini recente » Cod sursa (job #2649693) | Cod sursa (job #4469) | Cod sursa (job #2253379) | Cod sursa (job #2906720) | Cod sursa (job #1981318)
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;
int dad[NMAX], elem_number[NMAX];
inline void reuniune(int x, int y) {
int xx = x, yy = y, aux;
while (x != dad[x])
x = dad[x];
while (y != dad[y])
y = dad[y];
if (elem_number[x] < elem_number[y])
swap(x, y);
while (xx != x) {
aux = dad[xx];
dad[xx] = x;
xx = aux;
}
while (yy != y){
aux = dad[yy];
dad[yy] = x;
yy = aux;
}
elem_number[x] += elem_number[y];
dad[y] = x;
return;
}
inline bool request(int x, int y){
while (x != dad[x])
x = dad[x];
while (y != dad[y])
y = dad[y];
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;
}