Pagini recente » Cod sursa (job #1259642) | Cod sursa (job #412637) | Cod sursa (job #1380841) | Cod sursa (job #3208689) | Cod sursa (job #2942464)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m;
vector <int> tata;
vector <int> inaltime;
int radacina(int nod) {
if(tata[nod] == 0) // daca este radacina
return nod;
return tata[nod];
}
void compresie(int nod, int rad) {
if(tata[nod] == 0) // daca este radacina
return;
compresie(tata[nod], rad);
tata[nod] = rad;
}
void unire(int x, int y) {
int tataX = radacina(x);
int tataY = radacina(y);
int inaltimeX = inaltime[tataX];
int inaltimeY = inaltime[tataY];
if (inaltimeX > inaltimeY) {
tata[tataY] = tataX;
compresie(y, tataX);
}
else if(inaltimeX < inaltimeY) {
tata[tataX] = tataY;
compresie(x, tataY);
}
else {
tata[tataY] = tataX;
compresie(y, tataX);
inaltime[tataX]++;
}
}
int main()
{
fin >> n >> m;
tata.resize(n + 1, 0);
inaltime.resize(n + 1, 0);
for (int i = 1; i <= m; i++) {
int op, x, y;
fin >> op >> x >> y;
if (op == 1) {
unire(x, y);
}
else if (op == 2) {
if (radacina(x) == radacina(y))
fout << "DA\n";
else
fout << "NU\n";
}
}
fin.close();
fout.close();
return 0;
}