Maruf_Hasan

Kruskal's algorithm

Apr 4th, 2019
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define M 1000000
  4.  
  5. long long pr[M];
  6.  
  7. struct edge
  8. {
  9. long long u,v,w;
  10. bool operator<(const edge& p)const
  11. {
  12. return w<p.w;
  13. }
  14. };
  15. vector<edge>e;
  16. long long root(long long i)
  17. {
  18. if(pr[i]==i)
  19. return i;
  20. return pr[i]=root(pr[i]);
  21. }
  22.  
  23. long long mst(long long n)
  24. {
  25. sort(e.begin(),e.end());
  26. for(long long i=1;i<=n;i++)
  27. pr[i]=i;
  28. long long cnt=0,s=0;
  29. for(int i=0;i<e.size();i++)
  30. {
  31. long long u=root(e[i].u);
  32. long long v=root(e[i].v);
  33. if(u!=v)
  34. {
  35. pr[u]=v;
  36. cnt++;
  37. s+=e[i].w;
  38. if(cnt==n-1)
  39. break;
  40. }
  41. }
  42.  
  43. return s;
  44. }
  45. int main()
  46. {
  47. int n,space=0;
  48. while(scanf("%d",&n)==1)
  49. {
  50.  
  51. int m;
  52. int chal=n;
  53. n--;
  54. long long sum=0;
  55. while(n--)
  56. {
  57. int x,y,w;
  58. cin>>x>>y>>w;
  59. sum+=w;
  60. // //edge get;
  61. //get.u=x;
  62. //get.v=y;
  63. //get.w=w;
  64. //e.push_back(get);
  65. }
  66. int k;
  67. cin>>k;
  68. while(k--)
  69. {
  70. int x,y,w;
  71. cin>>x>>y>>w;
  72. edge get;
  73. get.u=x;
  74. get.v=y;
  75. get.w=w;
  76. e.push_back(get);
  77. }
  78. cin>>m;
  79. while(m--)
  80. {
  81. int x,y,w;
  82. cin>>x>>y>>w;
  83. edge get;
  84. get.u=x;
  85. get.v=y;
  86. get.w=w;
  87. e.push_back(get);
  88. }
  89. long long bal=mst(chal);
  90. if(space==0)
  91. {
  92. space=1;
  93. }
  94. else
  95. {
  96. cout<<endl;
  97. }
  98. cout<<sum<<endl;
  99. cout<<bal<<endl;
  100. e.clear();
  101. }
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment