Pagini recente » Cod sursa (job #2300775) | Cod sursa (job #1531281) | Cod sursa (job #1204659) | Cod sursa (job #2810479) | Cod sursa (job #2967667)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, v[100005], x, y, queryType;
int return_rad(int x) {
int rad = x;
while(v[rad] > 0)
rad = v[rad];
while(v[x] > 0) {
int father = v[x];
v[x] = rad;
x = father;
}
return rad;
}
void join(int x, int y) {
int rad_x = return_rad(x);
int rad_y = return_rad(y);
if(-v[rad_x] > -v[rad_y]) {
v[rad_x] += v[rad_y];
v[rad_y] = rad_x;
}
else {
v[rad_y] += v[rad_x];
v[rad_x] = rad_y;
}
}
bool verif(int x, int y) {
int rad_x = return_rad(x);
int rad_y = return_rad(y);
if(rad_x == rad_y)
return 1;
else
return 0;
}
int main ()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
v[i] = -1;
}
for (int i = 1; i <= m; i++)
{
fin >> queryType >> x >> y;
if (queryType == 1)
{
join (x, y);
}
else
{
if (verif (x, y))
fout << "DA\n";
else
fout << "NU\n";
}
}
return 0;
}