Advertisement
PedalaVasile

Untitled

Oct 16th, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. ifstream fin("modern.in");
  6. ofstream fout("modern.out");
  7.  
  8. int parent[110], rnk[110];
  9.  
  10.  
  11. struct da {
  12. int f, t, cost;
  13. };
  14.  
  15. bool comp(da a, da b)
  16. {
  17. return a.cost < b.cost;
  18. }
  19.  
  20. vector < da > v;
  21. vector < pair < int, int > > muuu;
  22.  
  23. int n, m, cT;
  24.  
  25. int ufind(int nod)
  26. {
  27. while (parent[nod] != nod)
  28. {
  29. parent[nod] = parent[parent[nod]];
  30. nod = parent[nod];
  31. }
  32.  
  33. return nod;
  34. }
  35.  
  36. void unite(int a, int b)
  37. {
  38. if (rnk[a] > rnk[b])
  39. parent[b] = a;
  40. else
  41. parent[a] = b;
  42.  
  43. if (rnk[a] == rnk[b])
  44. rnk[b]++;
  45. }
  46.  
  47. void Kruskal()
  48. {
  49. for (da el : v)
  50. {
  51. int rootF = ufind(el.f), rootT = ufind(el.t);
  52.  
  53. if (rootF != rootT)
  54. {
  55. muuu.push_back({el.f, el.t});
  56.  
  57. cT += el.cost;
  58. unite(rootT, rootF);
  59. }
  60. }
  61. }
  62.  
  63. int main()
  64. {
  65. fin >> n >> m;
  66.  
  67. muuu.reserve(m);
  68.  
  69. for (int i = 1; i <= m; i++)
  70. {
  71. int a, b, c;
  72.  
  73. fin >> a >> b >> c;
  74.  
  75. v.push_back({a, b, c});
  76. }
  77.  
  78. sort(v.begin(), v.end(), comp);
  79.  
  80. for (int i = 1; i <= n; i++)
  81. parent[i] = i, rnk[i] = 1;
  82.  
  83.  
  84. Kruskal();
  85.  
  86.  
  87.  
  88. for (auto el : muuu)
  89. {
  90. fout << el.first << ' ' << el.second << '\n';
  91. }
  92.  
  93. fout << cT * 100 << '\n';
  94.  
  95.  
  96. fin.close();
  97. fout.close();
  98. return 0;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement