Advertisement
Saleh127

UVA 1174 / MST

Sep 25th, 2021
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. #define test int tt; cin>>tt; for(int cs=1;cs<=tt;cs++)
  5.  
  6. vector<ll>parent,rankk;
  7.  
  8. vector<pair<ll,pair<ll,ll>>>edge;
  9.  
  10. void make_set(ll n)
  11. {
  12. for(ll i=0; i<n; i++)
  13. {
  14. parent[i] = i;
  15. rankk[i] = 0;
  16. }
  17. }
  18.  
  19. int find_set(ll v)
  20. {
  21. if (v == parent[v])
  22. {
  23. return v;
  24. }
  25. return parent[v] = find_set(parent[v]);
  26. }
  27.  
  28. void union_sets(ll a, ll b)
  29. {
  30. a = find_set(a);
  31. b = find_set(b);
  32.  
  33. if (a != b)
  34. {
  35. if(rand()%2)
  36. {
  37. swap(a,b);
  38. }
  39. parent[b]=a;
  40. /* else use this
  41. if (rankk[a] < rankk[b]){swap(a, b);} parent[b] = a; if (rankk[a] == rankk[b]){rankk[a]++;}
  42. */
  43. }
  44. }
  45.  
  46.  
  47. int main()
  48. {
  49. ios_base::sync_with_stdio(0);
  50. cin.tie(0);
  51. cout.tie(0);
  52.  
  53. test
  54. {
  55. ll n,m,i,j,k,l=1,e;
  56. string c,d;
  57. map<string,ll>x;
  58.  
  59. if(cs>1) cout<<endl;
  60.  
  61. cin>>n;
  62. cin>>m;
  63.  
  64. n+=3;
  65.  
  66. edge.clear();
  67. parent.resize(n);
  68. rankk.resize(n);
  69. make_set(n);
  70.  
  71. for(i=0; i<m; i++)
  72. {
  73. cin>>c>>d>>e;
  74.  
  75. if(x[c])
  76. {
  77. j=x[c];
  78. }
  79. else
  80. {
  81. x[c]=l;
  82. j=x[c];
  83. l++;
  84. }
  85.  
  86. if(x[d])
  87. {
  88. k=x[d];
  89. }
  90. else
  91. {
  92. x[d]=l;
  93. k=x[d];
  94. l++;
  95. }
  96.  
  97. edge.push_back({e,{j,k}});
  98. }
  99.  
  100. sort(edge.begin(),edge.end());
  101.  
  102. l=0;
  103.  
  104. for(auto dd:edge)
  105. {
  106. if(find_set(dd.second.second)!=find_set(dd.second.first))
  107. {
  108. l+=dd.first;
  109. union_sets(dd.second.first,dd.second.second);
  110. }
  111. }
  112. cout<<l<<endl;
  113. }
  114. return 0;
  115. }
  116.  
  117.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement