Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- void make_set(vector <int> &parent, vector <int> &power, int v) {
- parent[v] = v;
- power[v] = 1;
- /// rank[v] = 1 /// for rank euristica
- }
- int leader(vector <int> &parent, int v) {
- if (parent[v] == v)
- return v;
- return parent[v] = leader(parent, parent[v]);
- }
- /// euristica with sets' power
- void merge_set(vector <int> &parent, vector <int> &power, int a, int b) {
- a = leader(parent, a);
- b = leader(parent, b);
- if (a != b) {
- if (power[a] < power[b])
- swap(a, b);
- parent[b] = a;
- power[a] += power[b];
- /// power[b] = 0;
- }
- }
- /// euristica with sets' rank
- void merge_set(vector <int> &parent, vector <int> &rank, int a, int b) {
- a = leader(parent, a);
- b = leader(parent, b);
- if (a != b) {
- if (rank[a] < rank[b])
- swap(a, b);
- parent[b] = a;
- if (rank[a] == rank[b])
- rank[a]++;
- }
- }
- int main()
- {
- cout << "Hello world!" << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement