BotByte

kruskal.cpp

Feb 22nd, 2017
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.22 KB | None | 0 0
  1. /* Minimum Spanning Tree - Kruskal */
  2. /* Author : M. A. Rafsan Mazumder */
  3.  
  4. #include <bits/stdc++.h>
  5.  
  6. using namespace std;
  7.  
  8. #define MAX 10000
  9. #define ll long long
  10.  
  11. pair<ll, pair<int, int> > p[MAX];
  12. int id[MAX];
  13. int nodes, edges;
  14.  
  15. void initialize()
  16. {
  17.     for(int i=0; i<MAX; i++) id[i] = i;
  18. }
  19.  
  20. int root(int x)
  21. {
  22.     while(id[x] != x){
  23.         id[x] = id[id[x]];
  24.         x = id[x];
  25.     }
  26.     return x;
  27. }
  28.  
  29. void union1(int x, int y)
  30. {
  31.     int p = root(x);
  32.     int q = root(y);
  33.     id[p] = id[q];
  34. }
  35.  
  36. ll kruskal(pair<ll, pair<int, int> > p[])
  37. {
  38.     int x, y;
  39.     ll minimumCost = 0, cost;
  40.     for(int i=0; i<edges; i++){
  41.         x = p[i].second.first;
  42.         y = p[i].second.second;
  43.         cost = p[i].first;
  44.  
  45.         if(root(x) != root(y)){
  46.             minimumCost += cost;
  47.             union1(x, y);
  48.         }
  49.     }
  50.     return minimumCost;
  51. }
  52.  
  53. int main()
  54. {
  55.     int x, y;
  56.     long long weight, cost, minimumCost;
  57.     initialize();
  58.     cin >> nodes >> edges;
  59.     for(int i=0; i<edges; i++)
  60.     {
  61.         cin >> x >> y >> weight;
  62.         p[i] = make_pair(weight, make_pair(x, y));
  63.     }
  64.     sort(p, p + edges);
  65.     minimumCost = kruskal(p);
  66.     cout << minimumCost << endl;
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment