Pagini recente » Cod sursa (job #615412) | Cod sursa (job #1268574) | Cod sursa (job #615414) | Cod sursa (job #51442) | Cod sursa (job #2946096)
#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);
vector <int> rank_of_element (100001 , 0);
int find_root(int element){
if (parent[element] == element)
return element;
else {
parent[element] = find_root(parent[element]);
return parent[element];
}
}
void union_of_partition (int left, int right){
int left_rep = find_root(left);
int right_rep = find_root(right);
if (rank_of_element[left_rep] < rank_of_element[right_rep])
parent[left_rep] = right_rep;
if (rank_of_element[left_rep] > rank_of_element[right_rep])
parent[right_rep] = left_rep;
if (rank_of_element[left_rep] == rank_of_element[right_rep]){
parent[left_rep] = right_rep;
rank_of_element[left_rep]++;
}
}
int main (){
fin >> N >> M;
for (i = 1; i <= N; i++)
parent[i] = i;
for (i = 1; i <= M; i++){
fin >> task;
switch (task)
{
case 1:
fin >> j >> k;
union_of_partition(j , k);
break;
case 2:
fin >> j >> k;
if (find_root(j) == find_root(k))
fout << "DA\n";
else
fout << "NU\n";
break;
}
}
fin.close();
fout.close();
return 0;
}