Pagini recente » Cod sursa (job #2422146) | Cod sursa (job #1762301) | Cod sursa (job #169385) | Cod sursa (job #705962) | Cod sursa (job #2945548)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("disjoint.in");
ofstream out ("disjoint.out");
int n, m, parinti[100009], grupare[100009], op, x, y;
int radacina(int x)
{
int rad,y;
rad = x;
while (parinti[rad]!=rad) rad=parinti[rad];
y=x;
while(parinti[y]!=rad)
{
y=parinti[x];
parinti[x]=rad;
x=y;
}
return rad;
}
void mergeuire(int x, int y)
{
int rad1,rad2;
rad1=radacina(x);
rad2=radacina(y);
if(grupare[rad1]<grupare[rad2]) parinti[rad2]=rad1;
else parinti[rad1]=rad2;
if(grupare[rad1]==grupare[rad2]) grupare[rad1]++;
}
int main()
{
in>>n>>m;
for (int i = 1; i <= n; i++)
{
grupare[i]=1;
parinti[i]=i;
}
for (int i = 0; i < m; i++)
{
in>>op>>x>>y;
if (op == 1) mergeuire(x,y);
else if(radacina(x)==radacina(y)) out<<"DA\n";
else out<<"NU\n";
}
return 0;
}