Pagini recente » Cod sursa (job #888467) | Cod sursa (job #879225) | Cod sursa (job #599601) | Cod sursa (job #1410336) | Cod sursa (job #2517882)
#include <fstream>
using namespace std;
int Rang[100001], T[100001]; ///vector tata
int Radacina_multime(int x)
{
if(x != T[x])
{
int rx = Radacina_multime(T[x]);
T[x] = rx;
return T[x];
}
}
/*
int Radacina_multime(int x){
if(T[x] == 0)
return x;
else
{
int rx = Radacina_multime(T[x]);
T[x] = rx;
return rx;
}
}
*/
/*
void Unire(int x, int y)
{ int rx, ry;
rx = Radacina_multime(x);
ry = Radacina_multime(y);
if(rx != ry)
{
if(Rang[rx] < Rang[ry])
{
T[x] = ry;
Rang[ry] = Rang[ry] + Rang[rx];
}
else
{
T[ry] = rx;
Rang[rx] = Rang[rx] + Rang[ry];
}
}
}
*/
void Unire(int x, int y)
{
int rx = Radacina_multime(x), ry = Radacina_multime(y);
if(rx != ry)
{
if(Rang[rx] > Rang[ry])
T[ry] = rx;
else
{
T[rx] = ry;
if(Rang[rx] == Rang[ry])
Rang[ry] ++;
}
}
}
int main()
{
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, x, y, k, o, i;
f >> n >> k;
///initial fiecare nod pointeaza catre el insusi iar rangul fiecarui arbore este 1
for(i = 1; i <= n; ++ i)
{
T[i] = i;
Rang[i] = 1;
}
for(i = 1; i <= k; ++ i)
{
f >> o >> x >> y;
if(o == 1)
Unire(x, y);
else
{
if(Radacina_multime(x) == Radacina_multime(y))
g << "DA" << '\n';
else
g << "NU" << "\n";
}
}
return 0;
}