Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Minimum Spanning Tree - Kruskal */
- /* Author : M. A. Rafsan Mazumder */
- #include <bits/stdc++.h>
- using namespace std;
- #define MAX 10000
- #define ll long long
- pair<ll, pair<int, int> > p[MAX];
- int id[MAX];
- int nodes, edges;
- void initialize()
- {
- for(int i=0; i<MAX; i++) id[i] = i;
- }
- int root(int x)
- {
- while(id[x] != x){
- id[x] = id[id[x]];
- x = id[x];
- }
- return x;
- }
- void union1(int x, int y)
- {
- int p = root(x);
- int q = root(y);
- id[p] = id[q];
- }
- ll kruskal(pair<ll, pair<int, int> > p[])
- {
- int x, y;
- ll minimumCost = 0, cost;
- for(int i=0; i<edges; i++){
- x = p[i].second.first;
- y = p[i].second.second;
- cost = p[i].first;
- if(root(x) != root(y)){
- minimumCost += cost;
- union1(x, y);
- }
- }
- return minimumCost;
- }
- int main()
- {
- int x, y;
- long long weight, cost, minimumCost;
- initialize();
- cin >> nodes >> edges;
- for(int i=0; i<edges; i++)
- {
- cin >> x >> y >> weight;
- p[i] = make_pair(weight, make_pair(x, y));
- }
- sort(p, p + edges);
- minimumCost = kruskal(p);
- cout << minimumCost << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment