#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int spanningTree(int V, vector<vector<int>> edges){
priority_queue<pair<int,pair<int,int>>, vector<pair<int,pair<int,int>>>, greater<pair<int,pair<int,int>>>> pq;
vector<bool> visited(V,false);
vector<vector<pair<int,int>>> adj_list(V);
for(int i=0;i<edges.size();i++){
int start = edges[i][0];
int end = edges[i][1];
int weight = edges[i][2];
adj_list[start].push_back({end,weight});
adj_list[end].push_back({start,weight});
}
int sum = 0;
visited[0] = true;
for(int i=0;i<adj_list[0].size();i++){
int dest = adj_list[0][i].first;
int weight = adj_list[0][i].second;
pq.push({weight,make_pair(0,dest)});
}
while(!pq.empty()){
auto temp = pq.top();
pq.pop();
int start = temp.second.first;
int end = temp.second.second;
int weight = temp.first;
if((visited[start] and !visited[end])){
visited[end] = true;
for(int i=0;i<adj_list[end].size();i++){
int dest = adj_list[end][i].first;
int weight = adj_list[end][i].second;
pq.push({weight,make_pair(end,dest)});
}
sum+=weight;
}
else if(!visited[start] and visited[end]){
visited[start] = true;
for(int i=0;i<adj_list[start].size();i++){
int dest = adj_list[start][i].first;
int weight = adj_list[start][i].second;
pq.push({weight,make_pair(start,dest)});
}
sum+=weight;
}
}
return sum;
}
int main() {
int V = 5;
vector<vector<int>> edges = {{0, 1, 2}, {0, 2, 1}, {1, 2, 1}, {2, 3, 2}, {3, 4, 1}, {4, 2, 2}};
int sum = spanningTree(V, edges);
cout << "The sum of all the edge weights: " << sum << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBzcGFubmluZ1RyZWUoaW50IFYsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZWRnZXMpewoJcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQscGFpcjxpbnQsaW50Pj4sIHZlY3RvcjxwYWlyPGludCxwYWlyPGludCxpbnQ+Pj4sIGdyZWF0ZXI8cGFpcjxpbnQscGFpcjxpbnQsaW50Pj4+PiBwcTsKCXZlY3Rvcjxib29sPiB2aXNpdGVkKFYsZmFsc2UpOwoJdmVjdG9yPHZlY3RvcjxwYWlyPGludCxpbnQ+Pj4gYWRqX2xpc3QoVik7Cglmb3IoaW50IGk9MDtpPGVkZ2VzLnNpemUoKTtpKyspewoJCWludCBzdGFydCA9IGVkZ2VzW2ldWzBdOwoJCWludCBlbmQgPSBlZGdlc1tpXVsxXTsKCQlpbnQgd2VpZ2h0ID0gZWRnZXNbaV1bMl07CgkJYWRqX2xpc3Rbc3RhcnRdLnB1c2hfYmFjayh7ZW5kLHdlaWdodH0pOwoJCWFkal9saXN0W2VuZF0ucHVzaF9iYWNrKHtzdGFydCx3ZWlnaHR9KTsKCX0KCWludCBzdW0gPSAwOwoJdmlzaXRlZFswXSA9IHRydWU7Cglmb3IoaW50IGk9MDtpPGFkal9saXN0WzBdLnNpemUoKTtpKyspewoJCWludCBkZXN0ID0gYWRqX2xpc3RbMF1baV0uZmlyc3Q7CgkJaW50IHdlaWdodCA9IGFkal9saXN0WzBdW2ldLnNlY29uZDsKCQlwcS5wdXNoKHt3ZWlnaHQsbWFrZV9wYWlyKDAsZGVzdCl9KTsKCX0KCXdoaWxlKCFwcS5lbXB0eSgpKXsKCQlhdXRvIHRlbXAgPSBwcS50b3AoKTsKCQlwcS5wb3AoKTsKCQlpbnQgc3RhcnQgPSB0ZW1wLnNlY29uZC5maXJzdDsKCQlpbnQgZW5kID0gdGVtcC5zZWNvbmQuc2Vjb25kOwoJCWludCB3ZWlnaHQgPSB0ZW1wLmZpcnN0OwoJCWlmKCh2aXNpdGVkW3N0YXJ0XSBhbmQgIXZpc2l0ZWRbZW5kXSkpewoJCQl2aXNpdGVkW2VuZF0gPSB0cnVlOwoJCQlmb3IoaW50IGk9MDtpPGFkal9saXN0W2VuZF0uc2l6ZSgpO2krKyl7CgkJCQlpbnQgZGVzdCA9IGFkal9saXN0W2VuZF1baV0uZmlyc3Q7CgkJCQlpbnQgd2VpZ2h0ID0gYWRqX2xpc3RbZW5kXVtpXS5zZWNvbmQ7CgkJCQlwcS5wdXNoKHt3ZWlnaHQsbWFrZV9wYWlyKGVuZCxkZXN0KX0pOwoJCQl9CgkJCXN1bSs9d2VpZ2h0OwoJCX0KCQllbHNlIGlmKCF2aXNpdGVkW3N0YXJ0XSBhbmQgdmlzaXRlZFtlbmRdKXsKCQkJdmlzaXRlZFtzdGFydF0gPSB0cnVlOwoJCQlmb3IoaW50IGk9MDtpPGFkal9saXN0W3N0YXJ0XS5zaXplKCk7aSsrKXsKCQkJCWludCBkZXN0ID0gYWRqX2xpc3Rbc3RhcnRdW2ldLmZpcnN0OwoJCQkJaW50IHdlaWdodCA9IGFkal9saXN0W3N0YXJ0XVtpXS5zZWNvbmQ7CgkJCQlwcS5wdXNoKHt3ZWlnaHQsbWFrZV9wYWlyKHN0YXJ0LGRlc3QpfSk7CgkJCX0KCQkJc3VtKz13ZWlnaHQ7CgkJfQoJfQoJcmV0dXJuIHN1bTsKfQoKaW50IG1haW4oKSB7CglpbnQgViA9IDU7Cgl2ZWN0b3I8dmVjdG9yPGludD4+IGVkZ2VzID0ge3swLCAxLCAyfSwgezAsIDIsIDF9LCB7MSwgMiwgMX0sIHsyLCAzLCAyfSwgezMsIDQsIDF9LCB7NCwgMiwgMn19OwoKCWludCBzdW0gPSBzcGFubmluZ1RyZWUoViwgZWRnZXMpOwoJY291dCA8PCAiVGhlIHN1bSBvZiBhbGwgdGhlIGVkZ2Ugd2VpZ2h0czogIiA8PCBzdW0gPDwgZW5kbDsKCglyZXR1cm4gMDsKfQ==