Advertisement
Naimul_X

Untitled

May 30th, 2021
29
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. ///********This code is contributed By Naimul Karim Hredoy************
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4.  
  5. int v;
  6. int parent[50];
  7. int adjMat[50][50];
  8. int MST[50][50];
  9.  
  10. int parentOf(int n){
  11. int q = n;
  12. int p = parent[n];
  13. while(p!=-1){
  14. p=parent[p];
  15. n=parent[n];
  16. }
  17.  
  18. // path compression
  19. while(parent[q]!=-1){
  20. parent[q] = n;
  21. q = parent[q];
  22. }
  23.  
  24. return n;
  25. }
  26.  
  27. void kruskal(){
  28. for(int i=0;i<v;i++)
  29. {
  30. parent[i]=-1;
  31. }
  32. set<int> s;
  33. while(s.size()<v){
  34. int u,vr, m=INT_MAX;
  35. for(int i=0;i<v;i++){ // minimum edge is [u][v]
  36. for(int j=0;j<v;j++){
  37. if( adjMat[i][j]!=0 && m>adjMat[i][j]){
  38. m=adjMat[i][j];
  39. u=i; vr=j;
  40. }
  41. }
  42. }
  43.  
  44. adjMat[u][vr]=0;
  45. adjMat[vr][u]=0;
  46. if(parentOf(u)!=parentOf(vr) ){
  47. parent[parentOf(u)]=parentOf(vr);
  48. MST[u][vr]=m;
  49. MST[vr][u]=m;
  50. s.insert(u);
  51. s.insert(vr);
  52. }
  53. }
  54. }
  55.  
  56. int main(){
  57.  
  58. int e;
  59. cin >> v >> e;
  60.  
  61. for(int i=0; i<v; i++){
  62. for(int j=0; j<v; j++){
  63. adjMat[i][j] = 0;
  64. MST[i][j] = 0;
  65. }
  66. }
  67.  
  68.  
  69. for(int i=0; i<e;i++){
  70. int x,y,z;
  71. cin >>x>>y>>z;
  72. adjMat[x][y] = z;
  73. adjMat[y][x] = z;
  74. }
  75.  
  76. kruskal();
  77.  
  78. /* cout <<"\nPARENTS-\n";
  79. for(int i=0;i<v;i++){
  80. cout<< i <<" | ";
  81. }
  82. cout<<endl;
  83. for(int i=0;i<v;i++){
  84. cout<< parent[i] <<" | ";
  85. }
  86. cout <<endl;*/
  87.  
  88. int sum = 0;
  89. cout << "MST\n";
  90. for(int i=0;i<v;i++){
  91. for(int j=0;j<i;j++){
  92. if(MST[i][j]!=0){
  93. cout << i << " - " << j <<endl;
  94. sum+=MST[i][j];
  95. }
  96. }
  97. }
  98. cout <<endl;
  99.  
  100. cout << "Sum of edge weights "<< sum<<endl;
  101.  
  102. return 0;
  103. }
  104. /*
  105. 4 5
  106. 0 1 10
  107. 0 2 6
  108. 0 3 5
  109. 1 3 15
  110. 2 3 4
  111. */
  112.  
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement