Pagini recente » Cod sursa (job #1468571) | Cod sursa (job #1012281) | Cod sursa (job #1038636) | Cod sursa (job #293413) | Cod sursa (job #2989269)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100001;
int dad[NMAX], rnk[NMAX];
int n, m;
void init()
{
for(int i=1; i<=n; ++i)
dad[i]=i;
}
int dofind(int nod)
{
if(dad[nod]!=nod)
{
int repr=dofind(dad[nod]);
dad[nod]=repr;
return repr;
}
return dad[nod];
}
void dounion(int n1, int n2)
{
int rx=dofind(n1);
int ry=dofind(n2);
if(rnk[rx]==rnk[ry])
{
dad[rx]=ry;
rnk[ry]++;
}
else if(rnk[rx]<rnk[ry]) dad[rx]=ry;
else dad[ry]=rx;
}
int main()
{
fin>>n>>m;
init();
for(int i=1; i<=m; ++i)
{
int cod, x, y;
fin>>cod>>x>>y;
if(cod==1)
{
int rx=dofind(x);
int ry=dofind(y);
dounion(rx, ry);
}
else
{
int rx=dofind(x);
int ry=dofind(y);
if(rx==ry)
fout<<"DA\n";
else fout<<"NU\n";
}
}
}