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;
}
