Pagini recente » Cod sursa (job #2028562) | Cod sursa (job #370225) | Cod sursa (job #156907) | Cod sursa (job #2118058) | Cod sursa (job #3338710)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
class padure{
public:
int *Parinte;
int *Rang;
int nr_elem;
padure(int n){
nr_elem = n;
Parinte = new int [nr_elem+1];
Rang = new int [nr_elem+1];
for(int i=0;i<=nr_elem;i++){
Parinte[i] = i;
Rang[i] = 1;
}
}
void Union(int x,int y){
int rx,ry;
rx = find(x);
ry = find(y);
if(Rang[rx] > Rang[ry]){
Parinte[ry] = rx;
Rang[rx] += Rang[ry];
}
else{
Parinte[rx] = ry;
Rang[ry] += Rang[rx];
}
}
int find(int x){
int Varf=x,y;
while(Parinte[Varf]!=Varf){
Varf = Parinte[Varf];
}
while(Parinte[x]!=x){
y = Parinte[x];
Parinte[y] = Varf;
x = y;
}
return x;
}
bool impreuna(int x,int y){
return find(x) == find(y);
}
void afis_parinti(){
cout<<"NR NOD : ";
for(int i=1;i<=nr_elem;i++){
cout<<i<<" ";
}
cout<<'\n';
cout<<"PARINTE: ";
for(int i=1;i<=nr_elem;i++){
cout<<Parinte[i]<<" ";
}
cout<<'\n'<<'\n';
}
~padure(){
delete [] Parinte;
}
};
void solve(){
int nr_elem,nr_intrebari;
fin>>nr_elem>>nr_intrebari;
padure Padure(nr_elem);
int tip,n1,n2;
for(int i=1;i<=nr_intrebari;i++){
fin>>tip>>n1>>n2;
if(tip==1){
Padure.Union(n1,n2);
///Padure.afis_parinti();
}
if(tip==2){
if(Padure.impreuna(n1,n2)){
fout<<"DA";
}
else{
fout<<"NU";
}
fout<<'\n';
}
}
}
int main(){
solve();
return 0;
}