Pagini recente » Cod sursa (job #2404165) | Cod sursa (job #3190411) | Cod sursa (job #383475) | Cod sursa (job #1698311) | Cod sursa (job #2948187)
///Idee: retinem multimile in vectorul tata, avand initial rangul 1.
///Dupa aceea citim operatiile si apelam corespunaztor codului functiile
///Daca avem functia reuniune atunci pt fiecare multime, folosind functia CautaRadacina, retinem tatal elementului.
///Cea care are gradul mai mare este tata pentru cealalta
///Daca avem functia afiseaza verificam daca multimile au acelasi tata
///Complexitate:O(n^2 + mlogn)
#include<fstream>
#include<vector>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout("disjoint.out");
int n, m, cod, x, y;
vector<int> tata;
int cautaRadacina(int n){
while(tata[n] != n){
tata[n] = tata[tata[n]];
n = tata[n];
}
return n;
}
void reuniune(int& x, int& y){
int a = cautaRadacina(x);
int b = cautaRadacina(y);
tata[a] = tata[b];
}
void afisare(int& x, int& y){
if (cautaRadacina(x) == cautaRadacina(y))
fout<<"DA"<<"\n";
else
fout<<"NU"<<"\n";
}
int main(){
fin>>n>>m;
tata.resize(n+1);
for(int i=1; i<=n; i++)
tata[i] = i;
for(int i=1; i<=m; i++){
fin>>cod>>x>>y;
if(cod == 1)
reuniune(x,y);
else
afisare(x,y);
}
}