Pagini recente » Cod sursa (job #2052322) | Cod sursa (job #730309) | Cod sursa (job #2600816) | Cod sursa (job #2750900) | Cod sursa (job #2836526)
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int tata[100001], rang[100001];
int radacina (int i)
{
int j, y;
for (j = i; tata[j] != j; j = tata[j]);
for (;tata[i] != i;)
{
y = tata[i];
tata[i] = j;
i = y;
}
return j;
}
void unesc (int i, int j)
{
int radi, radj;
radi = radacina (i);
radj = radacina (j);
if (rang[radi] > rang[radj])
tata[radj] = radi;
else
{
tata[radi] = radj;
if (rang[radi] == rang[radj])
rang[radj] += 1;
}
}
int main ()
{
int n, m, intreb, i, j, k;
f >> n >> m;
for (i = 1; i <= n; i += 1)
tata[i] = i;
for (k = 1; k <= m; k += 1)
{
f >> intreb >> i >> j;
if (intreb == 1)
unesc (i, j);
else
{
if (radacina (i) == radacina (j))
g << "DA";
else
g << "NU";
g << '\n';
}
}
return 0;
}