Pagini recente » Cod sursa (job #3238099) | Cod sursa (job #679339) | Cod sursa (job #2787909) | Cod sursa (job #786644) | Cod sursa (job #2660597)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int type,x,y,N,M;
int Parinte[100020],Range[100020];
int radacina(int I)
{
int R=I,Y;
while(R!=Parinte[R])
R=Parinte[R];
while(I!=Parinte[I])
{
Y=Parinte[I];
Parinte[I]=R;
I=Y;
}
return R;
}
void Unire(int I,int J)
{
I=radacina(I);
J=radacina(J);
if(I!=J)
{
if(Range[I]<Range[J])
Parinte[I]=J;
else
Parinte[J]=I;
if(Range[I]==Range[J])
Range[I]++;
}
}
int main()
{
f>>N>>M;
for(int i=1; i<=N; i++)
{
Parinte[i]=i;
Range[i]=1;
}
for(int q=0; q<M; q++)
{
f>>type>>x>>y;
if(type==1)
{
if(radacina(x)!=radacina(y))
Unire(x,y);
}
else
{
if(radacina(x)==radacina(y))
g<<"DA\n";
else
g<<"NU\n";
}
}
return 0;
}