Advertisement
Guest User

Untitled

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