Pagini recente » Cod sursa (job #351614) | Istoria paginii utilizator/bokortitanilla | Cod sursa (job #1900138) | Diferente pentru utilizator/mihnea.anghel intre reviziile 43 si 35 | Cod sursa (job #2026744)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
#define lim 100010
int dad[lim],r[lim]; /// rangul
int get_dad (int x)
{
if (x!=dad[x]) dad[x]=get_dad(dad[x]);
return dad[x];
}
void reuniune (int a, int b)
{
int auxa=get_dad(a), auxb=get_dad(b);
if (a!=b)
{
if (r[a]<r[b])
dad[auxa]=auxb, r[auxb]+=r[auxa];
else
dad[auxb]=auxa, r[auxa]+=r[auxb];
}
}
int main()
{
int n, m, tip, a, b;
fin>>n>>m;
for (int i=1; i<=n; i++)
dad[i]=i, r[i]=1;
for (int i=1; i<=m; i++)
{
fin>>tip>>a>>b;
if (tip==1)
{
reuniune(a,b);
}
else
{
int auxa=get_dad(a), auxb=get_dad(b);
if (auxa == auxb) fout<<"DA\n";
else fout<<"NU\n";
}
}
fin.close();
fout.close();
return 0;
}