Pagini recente » Cod sursa (job #2614601) | Cod sursa (job #2939319) | Cod sursa (job #2349065) | Cod sursa (job #115102) | Cod sursa (job #2936012)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
class multDisjuncta {
int *rang, *tata, n;
public:
multDisjuncta(int n) {
this->n = n;
rang = new int[n + 1];
tata = new int[n + 1];
creeazaMultimea();
}
void creeazaMultimea() {
for (int i = 1; i <= n; i++)
tata[i] = i;
}
int gaseste(int x) {
if (tata[x] != x)
tata[x] = gaseste(tata[x]);
return tata[x];
}
void merge(int x, int y) {
int xMult = gaseste(x);
int yMult = gaseste(y);
if (xMult == yMult)
return;
if (rang[xMult] < rang[yMult])
tata[xMult] = yMult;
else if (rang[xMult] > rang[yMult])
tata[yMult] = xMult;
else {
tata[yMult] = xMult;
rang[xMult]++;
}
}
void executa(int m){
for(int i =0;i<m;i++){
int a,b,c;
f>>a>>b>>c;
if(a==1){
merge(b,c);
}
if(a==2){
if(gaseste(b)!= gaseste(c))
g<<"NU\n";
else g<<"DA\n";
}
}
}
~multDisjuncta() {}
};
int main() {
int n,m;
f>>n>>m;
multDisjuncta a(n);
a.executa(m);
}