Rudro_Debnath

Untitled

Feb 9th, 2022
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. //Minimum spanning tree cost + edge find using kruskal + DSU
  2. //complexity: mlogn
  3.  
  4. #include <bits/stdc++.h>
  5. using namespace std;
  6.  
  7. #define ll long long int
  8. #define pb push_back
  9. #define MP make_pair
  10. #define all(x) x.begin(),x.end()
  11. #define Max 10000000000000000
  12.  
  13. vector<pair<ll,pair<ll,ll>>> g;
  14. ll par[1000007];
  15. vector<pair<ll,ll>> ans;
  16. map<pair<ll,ll>,ll> mp;
  17. ll mst_cost;
  18.  
  19. ll find_par(ll x)
  20. {
  21. if(par[x]==x) return x;
  22. return par[x]=find_par(par[x]);
  23. }
  24.  
  25. void ds_union(ll u,ll v)
  26. {
  27. ll par_u=find_par(u);
  28. ll par_v=find_par(v);
  29. if(par_u!=par_v){
  30. par[par_v]=par_u;
  31. ans.pb({u,v});
  32. }
  33. }
  34.  
  35. void mst(ll n)
  36. {
  37. ll i=0;
  38. while(ans.size()!=n-1){
  39. ds_union(g[i].second.first,g[i].second.second);
  40. i++;
  41. }
  42. }
  43.  
  44. int main()
  45. {
  46.  
  47. ll n,m;
  48. cin>>n>>m;
  49.  
  50. for(ll i=1;i<=m;i++){
  51. ll u,v,c;
  52. cin>>u>>v>>c;
  53. g.pb({c,{u,v}});
  54. mp[MP(u,v)]=c;
  55. }
  56.  
  57. for(ll i=1;i<=n;i++) par[i]=i;
  58.  
  59. sort(all(g));
  60. mst(n);
  61.  
  62. cout<<endl<<"Edges of the mst:"<<endl;
  63. for(ll i=0;i<ans.size();i++){
  64. cout<<ans[i].first<<" "<<ans[i].second<<endl;
  65. ll f=ans[i].first,l=ans[i].second;
  66. mst_cost+=mp[MP(f,l)];
  67. }
  68.  
  69. cout<<endl<<"Minimum spanning tree cost:"<<endl;
  70. cout<<mst_cost<<endl;
  71.  
  72. return 0;
  73. }
  74.  
  75. /*
  76. 4 5
  77. 1 2 2
  78. 1 3 4
  79. 2 3 1
  80. 3 4 4
  81. 2 4 5
  82.  
  83. ans:
  84. Edges of the mst:
  85. 2 3
  86. 1 2
  87. 3 4
  88.  
  89. Minimum spanning tree cost:
  90. 7
  91.  
  92. */
  93.  
Advertisement
Add Comment
Please, Sign In to add comment