Pagini recente » Cod sursa (job #2102523) | Cod sursa (job #1955125) | Cod sursa (job #1953127) | Cod sursa (job #2909417) | Cod sursa (job #2076701)
#include <fstream>
#define nmax 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tata[nmax],n,m,h[nmax];
int gasesteRadacina(int x)
{
int rX=x;
while(tata[rX]!=0)
rX=tata[rX];
int x2=tata[x];
while(x2!=rX&&x2!=0)
{
tata[x]=rX;
x=x2;
x2=tata[x];
}
return rX;
}
void reuniune(int x,int y)
{
int rX=gasesteRadacina(x);
int rY=gasesteRadacina(y);
if(h[rX]==h[rY])
{
tata[rY]=rX;
++h[rX];
}
else
{
if(h[rX]<h[rY])
tata[rX]=rY;
else
tata[rY]=rX;
}
}
void aceeasiMultime (int x,int y)
{
int rX=gasesteRadacina(x);
int rY=gasesteRadacina(y);
if(rX==rY)
g<<"DA\n";
else g<<"NU\n";
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; ++i)
h[i]=1;
for(int i=1;i<=m;++i)
{
int op,x,y;
f>>op>>x>>y;
if(op==1)
reuniune(x,y);
else aceeasiMultime(x,y);
}
return 0;
}