#include #include using namespace std; // representation of undirected edge (u, v) having weight 'weight' struct Edge { int u, v, weight; }; // Union-find data structure class UF { int *id, cnt, *sz; public: // Create an empty union find data structure with N isolated sets. UF(int N) { cnt = N; id = new int[N]; sz = new int[N]; for(int i=0; iweight < b->weight; } int main() { int V, E, i, N, u, v, cost; Edge **edges, **mst; // Assuming vertices are labeled 0...V-1 //freopen("input1.txt", "r", stdin); scanf("%d %d", &V, &E); // Enter the number of vertices and edges edges = new Edge*[E]; for(i=0; iu), &(edges[i]->v), &(edges[i]->weight)); } sort(edges, edges + E, comp); UF uf(V); mst = new Edge*[V-1]; for(N=i=cost=0; iu; v = edges[i]->v; if(!uf.connected(u, v)) { uf.merge(u, v); mst[N++] = edges[i]; cost += edges[i]->weight; } } printf("Total cost of MST : %d\n", cost); printf("Edges in MST :\n"); for(i=0; iu, mst[i]->v, mst[i]->weight); return 0; }