Pagini recente » Cod sursa (job #2308561) | Cod sursa (job #2401187) | Cod sursa (job #1050927) | Cod sursa (job #1243301) | Cod sursa (job #2948826)
#include <bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
vector<int> v;
vector<int> rang;
int n,m,i,operatie,x,y;
int radacina(int nod){// functia de gasire a reprezentantului
if(v[nod] == 0)
return nod;
else{
v[nod]=radacina(v[nod]);
return v[nod];
}
}
void op_1(int x, int y){// operatia de reuniune
int rad1=radacina(x);
int rad2=radacina(y);
if(rad1 != rad2){
if(rang[rad1] > rang[rad2])
v[rad2]=rad1;
else{
v[rad1]=rad2;
if(rang[rad1] == rang[rad2])
rang[rad2]++;// atribuim rangul radacinii corespunzator arborelui cu cele mai multe noduri
}
}
}
void op_2(int x, int y){// determinam daca 2 pcte apartin aceluiasi arbore
if(radacina(x) == radacina(y))
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
int main() {
f >> n >> m;
v.assign(n + 1, 0);
rang.assign(n+1,0);
for(i=1;i<=m;i++){
f >> operatie >> x >> y;
if(operatie==1)
op_1(x, y);
else
op_2(x,y);
}
}