Pagini recente » Cod sursa (job #555343) | Cod sursa (job #618642) | Cod sursa (job #884572) | Cod sursa (job #2448516) | Cod sursa (job #2588922)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin;
ofstream fout;
int task, number_of_tasks, n, i, j, k;
vector <int> parent (100001);
vector <int> rank_of_element (100001 , 0);
void create_disjoint(){
for (i=1; i<=n; i++)
parent[i] = i;
}
int find_element(int element){
if (parent[element] == element)
return element;
else {
parent[element] = find_element(parent[element]);
return parent[element];
}
}
void union_of_partition (int left, int right){
int left_rep = find_element(left);
int right_rep = find_element(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 (void){
fin.open("disjoint.in");
fout.open("disjoint.out");
fin>>n>>number_of_tasks;
create_disjoint();
for (i=1; i<=number_of_tasks; i++){
fin>>task;
switch (task)
{
case 1:
fin>>j>>k;
union_of_partition(j , k);
break;
case 2:
fin>>j>>k;
if (find_element(j) == find_element(k)) fout<<"DA\n";
else fout<<"NU\n";
break;
}
}
fin.close();
fout.close();
return 0;
}