Given a weighted, undirected, and connected graph. The task is to find the sum of weights of the edges of the Minimum Spanning Tree.
The task is to find the sum of weights of the edges of the Minimum Spanning Tree. |
Input:
2
3 3
1 2 5 2 3 3 1 3 1
2 1
1 2 5Output:
4
5Example:
Testcase 1: Sum of weights of edges in the minimum spanning tree is 4.
// { Driver Code Starts #include <bits/stdc++.h> using namespace std; int spanningTree(int V, int E, vector<vector<int>> &graph); // Driver code int main() { int t; cin >> t; while (t--) { int V, E; cin >> V >> E; vector<vector<int> > graph(V, vector<int>(V, INT_MAX)); while (E--) { int u, v, w; cin >> u >> v >> w; u--, v--; graph[u][v] = w; graph[v][u] = w; } cout << spanningTree(V, E, graph) << endl; } return 0; } // } Driver Code Ends // Function to construct and print MST for // a graph represented using adjacency // matrix representation, with V vertices. // graph[i][j] = weight if edge exits else INT_MAX int spanningTree(int V, int E, vector< vector<int> > &graph ){ vector<int> key(V,INT_MAX); vector<bool> vis(V,false); key[0]=0; int sum=0; for(int j=0;j<V;++j) { pair <int,int> p ; p.second=INT_MAX; for(int i=0;i<V;++i) { if(!vis[i]&&key[i]<p.second) { p.second=key[i]; p.first=i; } } vis[p.first]=true; sum+=p.second; for(int i=0;i<V;++i) { if(!vis[i] && graph[p.first][i]!=INT_MAX && graph[p.first][i]<key[i]) key[i]=graph[p.first][i]; } } return sum; }