Pagini recente » Cod sursa (job #2754026) | Cod sursa (job #2320971) | Cod sursa (job #668900) | Cod sursa (job #2614948) | Cod sursa (job #2441780)
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n, m, i, j, x, y, t[100002], k, rx, ry;
int radacina(int nod){
while(t[nod]>0){
nod=t[nod];
}
int r=nod;
while(t[nod]>0){
int aux=nod;
nod=t[nod];
t[aux]=r;
}
return r;
}
int main(){
fin>>n>>m;
/// initializam cu -1 vectorul reprezentand si gradul grupei careia ii sunt radacini
for(i=1; i<=n; i++){
t[i]=-1;
}
for(i=1; i<=m; i++){
fin>>k>>x>>y;
rx=radacina(x);
ry=radacina(y);
if(k==1){
/// reunim multimile ce contin elementele x si y adica tatal radacinii celui cu mai putini
/// subordonati devine radacina celeilalte, iar tatal radacinii celelalte se mareste cu nodurile obtinute
if(t[rx]<t[ry]){
/// numerele sunt negative asa ca < este de fapt > insemnand ca rx are gradul mai mare
t[rx]+=t[ry];
t[ry]=rx;
}else{
t[ry]+=t[rx];
t[rx]=ry;
}
}else{
/// verificam daca radacinile sunt egale
if(rx==ry){
fout<<"DA"<<"\n";
}else{
fout<<"NU"<<"\n";
}
}
}
}