Pagini recente » Cod sursa (job #2783570) | Cod sursa (job #2334573) | Cod sursa (job #1480980) | Cod sursa (job #1997248) | Cod sursa (job #2935638)
#include <fstream>
#include <vector>
using namespace std;
vector<int> tata, rang;
int n, m, cod, x, y;
void radacina(int& x) {
int r = x, aux;
//gasirea radacinii:
while (tata[r] != r)
r = tata[r];
//compresia drumurilor:
while (tata[x] != x) {
aux = tata[x];
tata[x] = r;
x = aux;
}
}
void reuniune(int& x, int& y) {
if (rang[x] == rang[y]) {
rang[x]++;
rang[y]++;
tata[y] = x;
}
else if (rang[x] > rang[y])
tata[y] = x;
else
tata[x] = y;
}
int main()
{
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
fin >> n >> m;
tata.resize(n + 1);
rang.resize(n + 1, 1);
for (int i = 1; i <= n; i++)
tata[i] = i;
while (m > 0) {
fin >> cod >> x >> y;
radacina(x);
radacina(y);
if (cod == 1)
reuniune(x, y);
else
if (x == y)
fout << "DA\n";
else
fout << "NU\n";
m--;
}
fin.close();
fout.close();
return 0;
}