Pagini recente » Cod sursa (job #1976644) | Cod sursa (job #3284352) | Cod sursa (job #349228) | Cod sursa (job #3291783) | Cod sursa (job #3298497)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int> tata(100001);
vector<int> inaltime(100001);
int radacina(int nod) {
int root = nod;
while (root != tata[root])
{
root = tata[root];
}
while (nod != root)
{
int nextnod = tata[nod];
tata[nod] = root;
nod = nextnod;
}
return root;
}
void uneste(int x, int y) {
int radacinaX = radacina(x);
int radacinaY = radacina(y);
if (inaltime[radacinaX] < inaltime[radacinaY])
{
tata[radacinaX] = radacinaY;
} else if (inaltime[radacinaX] > inaltime[radacinaY])
{
tata[radacinaY] = radacinaX;
} else
{
tata[radacinaX] = radacinaY;
inaltime[radacinaY] += 1;
}
return;
}
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int main() {
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; ++i)
{
tata[i] = i;
inaltime[i] = 1;
}
for (int i = 0; i < m; ++i)
{
int op, x, y;
fin >> op >> x >> y;
if (op == 1)
{
uneste(x, y);
}
else
{
if (radacina(x) == radacina(y))
{
fout << "DA\n";
} else
{
fout << "NU\n";
}
}
}
return 0;
}