Advertisement
matheus_monteiro

MST

Sep 7th, 2024
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int ms = 505;
  6.  
  7. int father[ms];
  8.  
  9. int find(int x) {
  10.     if(x == father[x])
  11.         return x;
  12.     return father[x] = find(father[x]);
  13. }
  14.  
  15. void join(int x, int y) {
  16.     x = find(x);
  17.     y = find(y);
  18.     if(x == y)
  19.         return;
  20.     father[x] = y;
  21. }
  22.  
  23. int main(){
  24.     int n, m;
  25.  
  26.     cin >> n >> m;
  27.  
  28.     vector<vector<int>> edges;
  29.  
  30.     for(int i = 0; i < m; ++i) {
  31.         int u, v, w;
  32.         cin >> u >> v >> w;
  33.         u--; v--;
  34.         edges.push_back({w, u, v});
  35.     }
  36.  
  37.     sort(edges.begin(), edges.end());
  38.  
  39.     for(int i = 0; i < n; ++i)
  40.         father[i] = i;
  41.  
  42.     int mstCost = 0;
  43.     for(auto e : edges) {
  44.         if(find(e[1]) != find(e[2])) {
  45.             join(e[1], e[2]);
  46.             mstCost += e[0];
  47.         }
  48.     }
  49.  
  50.     cout << mstCost << '\n';
  51.  
  52.     return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement