#include <iostream>
#include <vector>
#include <algorithm>  

std::vector<int> parent, rank;
void make_set(int v) {
        parent[v] = v;
        rank[v] = 0;
    }
    
int find_set(int v) {
    if (v == parent[v])
        return v;
    return parent[v] = find_set(parent[v]);
}

void union_sets(int a, int b) {
    a = find_set(a);
    b = find_set(b);
    if (a != b) {
        if (rank[a] < rank[b])
            std::swap(a, b);
        parent[b] = a;
        if (rank[a] == rank[b])
            rank[a]++;
    }
}

struct Edge {
    int u, v;
    double weight;
    bool operator<(Edge const& other) {
        return weight < other.weight;
    }
};
    

int main() {
    

    
    int n = 3;
    std::vector<Edge> edges;
    Edge E1 = {0,1,1.0};
    Edge E2 = {1,2,1.0};
    Edge E3 = {0,2,1.4142135623730951};
    edges.push_back(E1);
    edges.push_back(E2);
    edges.push_back(E3);
    int cost = 0;
    std::vector<Edge> result;
    parent.resize(n);
    rank.resize(n);
    for (int i = 0; i < n; i++)
        make_set(i);
    
    std::sort(edges.begin(), edges.end());
    
    for (Edge e : edges) {
        if (find_set(e.u) != find_set(e.v)) {
            cost += e.weight;
            result.push_back(e);
            union_sets(e.u, e.v);
        }
    }
    std::cout << cost << std::endl;
}

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: