Pagini recente » Cod sursa (job #2190568) | Cod sursa (job #370223) | Cod sursa (job #1554412) | Cod sursa (job #2936404) | Cod sursa (job #2622549)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[100005], rang[100005], y, x;
int rad(int nod)
{
if(nod==tata[nod]) return nod;
else
{ x=nod;
y=rad(tata[nod]);
tata[x]=y;
}
return tata[x];
}
int unire(int a, int b)
{
if(rang[a]>rang[b])
{
rang[b]=rang[a];
tata[b]=a;
}
else
if(rang[b]>rang[a])
{
rang[a]=rang[b];
tata[a]=b;
}
else
{
rang[a]++;
tata[b]=a;
}
}
int main()
{
int n, m, i, j, cod, a, b;
fin >> n >> m;
for(i=1; i<=n; i++)
{
tata[i]=i;
rang[i]=1;
}
for(i=1; i<=m; i++)
{
fin >> cod >> a >> b;
if(cod==1)
{
unire(rad(a), rad(b));
}
else
{
if(rad(a)!=rad(b)) fout << "NU" << "\n";
else fout << "DA" << "\n";
}
}
return 0;
}