BijonDurjoy

PPP DSU

Feb 28th, 2022
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.23 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. vector<int>parent;
  4. struct edge{
  5. int from, to, weight;
  6. edge(int u,int v, int w): from(u),to(v),weight(w){}
  7.  
  8. bool operator < (const edge& p) const {
  9. return weight < p.weight;
  10. }
  11.  
  12. };
  13.  
  14. vector<edge>graph;
  15.  
  16. int findParent(int node)
  17. {
  18. if(parent[node] == node)
  19. return node;
  20. return parent[node] = findParent(parent[node]);
  21. // return parent[node]==node ? node : parent[node] = findParent(parent[node]);
  22. }
  23.  
  24. int mst(int nodeNumber)
  25. {
  26. sort(graph.begin(),graph.end());
  27.  
  28. for(int i = 1 ;i <= nodeNumber; i++)
  29. parent[i] = i;
  30. int cost = 0;
  31. for(int i = 0 ; i < graph.size(); i++)
  32. {
  33. int from = findParent(graph[i].from);
  34. int to = findParent(graph[i].to);
  35.  
  36. if(from!=to)
  37. {
  38. parent[to] = from;
  39. cost += graph[i].weight;
  40. }
  41. }
  42. return cost;
  43. }
  44.  
  45. int main()
  46. {
  47. int nodeCount, edgeCount;
  48. cin >> nodeCount >> edgeCount;
  49. parent.resize(nodeCount+1);
  50.  
  51. for(int i = 1 ; i <= edgeCount; i++)
  52. {
  53. int u,v,w;
  54. cin >> u >> v >> w;
  55. graph.push_back(edge(u,v,w));
  56. }
  57.  
  58. cout<<mst(nodeCount)<<endl;
  59.  
  60. return 0;
  61. }
  62.  
Advertisement
Add Comment
Please, Sign In to add comment