Pagini recente » Cod sursa (job #2562933) | Cod sursa (job #419775) | Cod sursa (job #1489133) | Cod sursa (job #1297488) | Cod sursa (job #2019759)
#include <iostream>
#include <fstream>
#define DMAX 100002
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
struct arbore{
int tata;
int inaltime;
}nod[DMAX];
int n, m;
int radacina(int plecNod){
if(nod[plecNod].tata == plecNod){
return plecNod;
}else{
return radacina(nod[plecNod].tata);
}
}
void reuniune(int a, int b, int tataA, int tataB){
if(nod[tataA].inaltime > nod[tataB].inaltime){
nod[tataB].tata = tataA;
nod[tataB].inaltime = 1 + nod[tataA].inaltime;
}else{
nod[tataA].tata = tataB;
nod[tataA].inaltime = 1 + nod[tataB].inaltime;
}
}
void rezolvare(int tip, int a, int b){
int tataA, tataB;
tataA = radacina(a);
tataB = radacina(b);
if(tip == 1){
reuniune(a, b, tataA, tataB);
}else{
if(tataA == tataB){
out << "DA\n";
}
else{
out << "NU\n";
}
}
}
int main(){
in >> n >> m;
for(int i = 1; i <= n; i++){
nod[i].tata = i;
}
for(int i = 1; i <= m; i++){
int tip, a, b;
in >> tip >> a >> b;
rezolvare(tip, a, b);
}
return 0;
}