Advertisement
Guest User

Untitled

a guest
May 24th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. #include <cstdio>
  2. #include <queue>
  3.  
  4. using namespace std;
  5.  
  6. struct edge
  7. {
  8.     int u, v;
  9.     int s;
  10. };
  11.  
  12. // this is called operator overload
  13. // we can now use operator < with edges
  14. // priority_queue<edge> will also use this operator to sort edges
  15. bool operator< (edge a, edge b)
  16. {
  17.     if (a.s > b.s)
  18.         return true;
  19.     else
  20.         return false;
  21. }
  22.  
  23.  
  24. int find(int x, int* parent)
  25. {
  26.     while (parent[x] != x)x = parent[x];
  27.     return x;
  28. }
  29.  
  30. void unia(int x, int y, int* parent)
  31. {
  32.     int rx = find(x, parent);
  33.     int ry = find(y, parent);
  34.  
  35.     if (ry != rx) {
  36.         parent[ry] = rx;
  37.     }
  38. }
  39.  
  40. unsigned long long mst(priority_queue<edge> Q, int n)
  41. {
  42.     unsigned long long cost = 0;
  43.     int *parent = new int[n + 1];
  44.  
  45.     for (int i = 1; i <= n; i++) {
  46.         parent[i] = i;
  47.     }
  48.     parent[0] = n;
  49.  
  50.     /**********************
  51.     * PLACE FOR YOUR CODE *
  52.     **********************/
  53.     while (!Q.empty() && n>1) {
  54.         edge temp = Q.top();
  55.         if (find(temp.u, parent) != find(temp.v, parent)) {
  56.             unia(temp.u, temp.v, parent);
  57.             cost += temp.s;
  58.             n--;
  59.         }
  60.         Q.pop();
  61.         //  n--;
  62.     }
  63.  
  64.  
  65.     return cost;
  66. }
  67.  
  68. int main()
  69. {
  70.     int Z;
  71.     scanf("%d", &Z);
  72.     while (Z--)
  73.     {
  74.         int n, m;
  75.         scanf("%d %d", &n, &m);
  76.  
  77.         edge temp;
  78.         int u, v, s;
  79.  
  80.         priority_queue<edge> Q;
  81.  
  82.         for (int i = 0; i < m; i++)
  83.         {
  84.             scanf("%d %d %d", &u, &v, &s);
  85.             temp.u = u;
  86.             temp.v = v;
  87.             temp.s = s;
  88.             Q.push(temp);
  89.         }
  90.  
  91.         unsigned long long cost = mst(Q, n);
  92.  
  93.         printf("%llu\n", cost);
  94.     }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement