Pagini recente » Borderou de evaluare (job #2413444) | Borderou de evaluare (job #155782) | Borderou de evaluare (job #2662781) | Cod sursa (job #769929) | Cod sursa (job #3333015)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
const int Nmax = 100005;
struct element{
int radacina, marime;
void initializare(int al_catelea){
radacina = al_catelea;
marime = 1;
}
};
int n, q;
element dsu[Nmax];
void citire(){
fin >> n >> q;
}
void preinitializare(){
for(int i = 1; i <= n; i++){
dsu[i].initializare(i);
}
}
int actualizare_radacina(int x){
if(dsu[x].radacina == x){
return x;
}
int radacina = actualizare_radacina(dsu[x].radacina);
dsu[x].radacina = radacina;
return radacina;
}
void unire(int x, int y){
int r_x, r_y;
r_x = actualizare_radacina(x);
r_y = actualizare_radacina(y);
if(r_x == r_y){
return;
}
if(dsu[r_x].marime > dsu[r_y].marime){
swap(r_x, r_y);
}
dsu[r_x].radacina = r_y;
dsu[r_y].marime += dsu[r_x].marime;
}
bool sunt_in_aceeasi_multime(int x, int y){
return actualizare_radacina(x) == actualizare_radacina(y);
}
void citire_si_rezolvare_interogari(){
int tip, x, y;
for(int i = 1; i <= q; i++){
fin >> tip >> x >> y;
if(tip == 1){
unire(x, y);
}
else{
if(sunt_in_aceeasi_multime(x, y)){
fout << "DA\n";
}
else{
fout << "NU\n";
}
}
}
}
int main(){
citire();
preinitializare();
citire_si_rezolvare_interogari();
return 0;
}