Pagini recente » Cod sursa (job #643055) | Cod sursa (job #2460343) | Cod sursa (job #2244797) | Cod sursa (job #2504425) | Cod sursa (job #2966148)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("disjoint.in");
ofstream fout ("disjoint.out");
int task, M, N, i, j, k;
vector <int> parent (100001, -1);
vector <int> rank_of_element (100001 , 0);
int find_root(int element){
if (parent[element] == -1)
return element; //atunci cand cautam radicina
else { //updatam pentru elementul dorit
parent[element] = find_root(parent[element]); //care este radacina(asta in cazul in care
return parent[element]; //nu stiam deja)
}
}
void union_of_partition (int left, int right){
int left_rep = find_root(left);
int right_rep = find_root(right);
parent[left_rep] = right_rep;
}
int main (){
fin >> N >> M; //citim numarul de multimi
//si numarul de operatii
for (i = 1; i <= M; i++){ //citim tipul operatiei
fin >> task;
//reprezentam fiecare multime ca un arbore cu radacina
switch (task)
{
case 1:
fin >> j >> k;
union_of_partition(j , k); //reunim multimile
break;
case 2:
fin >> j >> k;
if (find_root(j) == find_root(k)) //cautam radacina multimilor si vedem daca e aceeasi
fout << "DA\n";
else
fout << "NU\n";
break;
}
}
fin.close();
fout.close();
return 0;
}