Pagini recente » Cod sursa (job #3266611) | Borderou de evaluare (job #2002046) | Cod sursa (job #2427287) | Cod sursa (job #309179) | Cod sursa (job #3182496)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
const int nmax = 100005;
int n, q, T[nmax], rang[nmax];
int multime(int nod)
{
if(T[nod] != nod)
T[nod] = multime(T[nod]);
return T[nod];
}
void reunire(int i, int j)
{
i = multime(i);
j = multime(j);
if(i == j)
return ;
if(rang[i] < rang[j])
T[i] = j;
else
T[j] = i;
if(rang[i] == rang[j])
rang[i] ++;
}
void verif(int i, int j)
{
if(multime(i) == multime(j))
g << "DA" << '\n';
else
g << "NU" << '\n';
}
int main()
{
f >> n >> q;
for(int i = 1; i <= n; i ++)
T[i] = i;
for(int i = 1; i <= q; i ++)
{
int op, x, y;
f >> op >> x >> y;
if(op == 1)
reunire(x, y);
else
verif(x, y);
}
return 0;
}