Advertisement
Stepavly

Untitled

Jul 15th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. struct edge
  7. {
  8. int s, e, w;
  9. };
  10.  
  11. bool operator<(const edge& a, const edge& b)
  12. {
  13. return a.w < b.w;
  14. }
  15.  
  16. const int N = (int)1e5 + 100;
  17.  
  18. int p[N];
  19. int sz[N];
  20.  
  21. int find_set(int v)
  22. {
  23. if(p[v] == v)
  24. return v;
  25.  
  26. return p[v] = find_set(p[v]);
  27. }
  28.  
  29. int merge(int a, int b)
  30. {
  31. a = find_set(a);
  32. b = find_set(b);
  33.  
  34. if(a == b)
  35. return 0;
  36.  
  37. if(sz[a] < sz[b])
  38. swap(a, b);
  39.  
  40. sz[a] += sz[b];
  41. p[b] = a;
  42.  
  43. return 1;
  44. }
  45.  
  46. int main()
  47. {
  48. ios_base::sync_with_stdio(0);
  49. cin.tie(0);
  50.  
  51. int nv, ne;
  52. cin >> nv >> ne;
  53.  
  54. vector<edge> edges(ne);
  55.  
  56. for(int i = 0; i < ne; i++)
  57. {
  58. cin >> edges[i].s >> edges[i].e >> edges[i].w;
  59.  
  60. --edges[i].s;
  61. --edges[i].e;
  62. }
  63.  
  64. for(int i = 0; i < nv; i++)
  65. {
  66. p[i] = i;
  67. sz[i] = 1;
  68. }
  69.  
  70. long long res = 0;
  71. sort(edges.begin(), edges.end());
  72.  
  73. for(int i = 0; i < ne; i++)
  74. {
  75. if(merge(edges[i].s, edges[i].e))
  76. {
  77. res += edges[i].w;
  78. }
  79. }
  80.  
  81. cout << res;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement