Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int find_set(int i, int* parent) {
- // If i is the parent of itself
- if (i == parent[i])
- return i;
- else
- // Else if i is not the parent of itself
- // Then i is not the representative of his set,
- // so we recursively call Find on its parent
- return find_set(parent[i],parent);
- }
- void union_set(int u, int v,int* parent) {
- parent[u] = parent[v];
- }
- int kruskalMST() {
- vector<pair<int, pair<int, int>> > T; // mst
- int* parent = new int[V];
- for (int i = 0; i < V; i++) parent[i] = i;
- int i, uRep, vRep;
- sort(edges.begin(),edges.end()); // increasing weight
- for (i = 0; i < (int)edges.size(); i++) {
- uRep = find_set(edges[i].second.first,parent);
- vRep = find_set(edges[i].second.second,parent);
- if (uRep != vRep) {
- T.push_back(edges[i]); // add to tree
- union_set(uRep, vRep,parent);
- }
- }
- int res = 0;
- for (int i = 0; i < (int)T.size(); i++) {
- res = res + T[i].first;
- }
- delete[] parent;
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement