Pagini recente » Cod sursa (job #2447891) | Cod sursa (job #460899) | Cod sursa (job #2511243) | Cod sursa (job #3285326) | Cod sursa (job #1487708)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
long t,x,y,n,m,i,j;
struct grupe
{
long nr,ant;
}gr[100004];
long rad(long nod,long &lg)
{
if (gr[nod].ant!=-1)
{
nod=gr[nod].ant;
lg++;
rad(nod, lg);
}
else
return nod;
}
void uneste(long x,long y)
{
long lgx=1,lgy=1,rx,ry,sav;
rx=rad(x,lgx);
ry=rad(y,lgy);
if (lgx<=lgy)
{
while (x!=-1)
{
sav=gr[x].ant;
gr[x].ant=ry;
gr[x].nr=gr[ry].nr;
x=sav;
}
}
else
{
while(y!=-1)
{
sav=gr[y].ant;
gr[y].ant=rx;
gr[y].nr=gr[rx].nr;
y=sav;
}
}
}
long qu(long x,long y)
{
long rx,ry,lgx,lgy;
rx=rad(x,lgx);
ry=rad(y,lgy);
if(gr[rx].nr==gr[ry].nr)
return 1;
return 0;
}
int main()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
gr[i].nr=i;
gr[i].ant=-1;
}
for (i=1;i<=m;i++)
{
f>>t>>x>>y;
if (t==1)
{
if (qu(x,y)==0)
uneste(x,y);
}
else
{
if (qu(x,y)==1)
g<<"DA\n";
else
g<<"NU\n";
}
}
return 0;
}