a53

plimbare1

a53
Mar 14th, 2019
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int N,M,a,b,c,x;
  4. typedef pair <int,int> iPair;
  5.  
  6. struct Graph
  7. {
  8. int V,E;
  9. vector <pair<int,iPair>> edges;
  10. Graph(int V,int E)
  11. {
  12. this->V=V;
  13. this->E=E;
  14. }
  15. void addEdge(int u,int v,int w)
  16. {
  17. edges.push_back({w,{u, v}});
  18. }
  19. int kruskalMST();
  20. };
  21.  
  22. struct DisjointSets
  23. {
  24. int *parent,*rnk;
  25. int n;
  26. DisjointSets(int n)
  27. {
  28. this->n=n;
  29. parent=new int[n+1];
  30. rnk=new int[n+1];
  31. for(int i=0;i<=n;++i)
  32. {
  33. rnk[i]=0;
  34. parent[i]=i;
  35. }
  36. }
  37. int find(int u)
  38. {
  39. if(u!=parent[u])
  40. parent[u] = find(parent[u]);
  41. return parent[u];
  42. }
  43. void merge(int x,int y)
  44. {
  45. x=find(x),y=find(y);
  46. if (rnk[x]>rnk[y])
  47. parent[y]=x;
  48. else
  49. parent[x]=y;
  50. if(rnk[x]==rnk[y])
  51. ++rnk[y];
  52. }
  53. };
  54.  
  55. int Graph::kruskalMST()
  56. {
  57. int mst_wt=0;
  58. sort(edges.begin(),edges.end());
  59. DisjointSets ds(V);
  60. vector< pair<int,iPair> >::iterator it;
  61. for(it=edges.begin();it!=edges.end();++it)
  62. {
  63. int u=it->second.first;
  64. int v=it->second.second;
  65.  
  66. int set_u=ds.find(u);
  67. int set_v=ds.find(v);
  68. if(set_u!=set_v)
  69. {
  70. mst_wt+=it->first;
  71. ds.merge(set_u,set_v);
  72. }
  73. }
  74. return mst_wt;
  75. }
  76.  
  77. int main()
  78. {
  79. ifstream f("plimbare1.in");
  80. f>>N>>M;
  81. Graph g(N,M);
  82. for(int i=1;i<=M;++i)
  83. {
  84. f>>x;
  85. if(x==1)
  86. {
  87. f>>a>>b;
  88. g.addEdge(a-1,b-1,0);
  89. }
  90. else
  91. {
  92. f>>a>>b>>c;
  93. g.addEdge(a-1,b-1,c);
  94. }
  95. }
  96. f.close();
  97. ofstream h("plimbare1.out");
  98. h<<g.kruskalMST();
  99. h.close();
  100. return 0;
  101. }
Advertisement
Add Comment
Please, Sign In to add comment