Pagini recente » Cod sursa (job #674396) | Cod sursa (job #2404614) | Monitorul de evaluare | Cod sursa (job #1806674) | Cod sursa (job #2569293)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int NMAX = 100000;
int N, M, p, x, y, t[NMAX + 5], r[NMAX + 5];
int GetParent(int nod)
{
int radacina = nod, copie_nod = nod;
while (t[nod] != nod)
{
radacina = t[nod];
nod = radacina;
}
while (t[copie_nod] != copie_nod)
{
int aux = t[copie_nod];
t[copie_nod] = radacina;
copie_nod = aux;
}
return radacina;
}
void Unite(int nod1, int nod2)
{
int parent1 = GetParent(nod1);
int parent2 = GetParent(nod2);
if (parent1 == parent2)
{
return;
}
if (r[parent1] > r[parent2])
{
t[parent2] = parent1;
}
else if (r[parent1] < r[parent2])
{
t[parent1] = parent2;
}
else
{
t[parent1] = parent2;
r[parent1]++;
}
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; ++i)
{
t[i] = i;
}
while (M--)
{
fin >> p >> x >> y;
if (p == 1)
{
Unite(x, y);
}
else
{
if (GetParent(x) == GetParent(y))
{
fout << "DA\n";
}
else
{
fout << "NU\n";
}
}
}
fin.close();
fout.close();
return 0;
}