Pagini recente » Cod sursa (job #1824292) | Cod sursa (job #780024) | Cod sursa (job #1052484) | Cod sursa (job #2575661) | Cod sursa (job #2501841)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int Parinti[100002];
int nr_elem[100002];
int n, m;
int x, y;
int nr, i;
int operatie;
void operatie_1(int x, int y)
{
int x1 = x;
while(x1 != Parinti[x1])
{
x1 = Parinti[x1];
}
int x2 = x;
while(x2 != Parinti[x2])
{
x2 = Parinti[x2];
Parinti[x2] = x1;
}
int y1 = y;
while(y1 != Parinti[y1])
{
y1 = Parinti[y1];
}
int y2 = y;
while(y2 != Parinti[y2])
{
y2 = Parinti[y2];
Parinti[y2] = y1;
}
if(nr_elem[x1] >= nr_elem[y1])
{
Parinti[y1] = x1;
nr_elem[x1] += nr_elem[y1];
}
else
{
Parinti[x1] = y1;
nr_elem[y1] += nr_elem[x1];
}
}
void operatie_2(int x, int y)
{
int x1 = x;
while(x1 != Parinti[x1])
{
x1 = Parinti[x1];
}
int x2 = x;
while(x2 != Parinti[x2])
{
x2 = Parinti[x2];
Parinti[x2] = x1;
}
int y1 = y;
while(y1 != Parinti[y1])
{
y1 = Parinti[y1];
}
int y2 = y;
while(y2 != Parinti[y2])
{
y2 = Parinti[y2];
Parinti[y2] = y1;
}
if(x1 == y1)
fout<<"DA \n";
else
fout<<"NU \n";
}
int main()
{
fin>>n>>m;
for(i = 1; i <= n; i++)
{
Parinti[i] = i;
nr_elem[i] = 1;
}
for(i = 1; i <= m; i++)
{
fin>>operatie>>x>>y;
if(operatie == 1)
operatie_1(x, y);
else
operatie_2(x, y);
}
return 0;
}