Advertisement
tomalikem

Untitled

May 24th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.64 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) {
  27.         parent[x] = parent[parent[x]];
  28.         x = parent[x];
  29.     }
  30.     return x;
  31. }
  32.  
  33. void uni(int x, int y, int* parent)
  34. {
  35.     int rootX = find(x, parent);
  36.     int rootY = find(y, parent);
  37.     parent[rootX] = rootY;
  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 = 0; i <= n; i++) {
  46.         parent[i] = i;
  47.     }
  48.  
  49.     while(!Q.empty() && n > 1) {
  50.         edge e = Q.top(); Q.pop();
  51.         int parentU = find(e.u, parent);
  52.         int parentV = find(e.v, parent);
  53.         if(parentU != parentV) {
  54.             cost += e.s;
  55.             uni(parentU, parentV, parent);
  56.         }
  57.     }
  58.  
  59.     return cost;
  60. }
  61.  
  62. int main ()
  63. {
  64.     int Z;
  65.     scanf("%d", &Z);
  66.     while(Z--)
  67.     {
  68.         int n, m;
  69.         scanf ("%d %d", &n, &m);
  70.  
  71.         int u, v, s;
  72.         priority_queue<edge> Q;
  73.  
  74.         for (int i = 0; i < m; i++)
  75.         {
  76.             edge temp;
  77.             scanf("%d %d %d", &u, &v, &s);
  78.             temp.s = s;
  79.             temp.u = u;
  80.             temp.v = v;
  81.             Q.push(temp);
  82.         }
  83.  
  84.         unsigned long long cost = mst(Q, n);
  85.  
  86.         printf ("%llu\n", cost);
  87.     }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement