D_L3

Цикли в граф

Jan 25th, 2024
955
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.12 KB | None | 0 0
  1. #include <cmath>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <iostream>
  5. #include <algorithm>
  6. using namespace std;
  7.  
  8. class UnionFind{
  9.     vector<int> parents;
  10. public:
  11.     UnionFind(int n) : parents(n){
  12.         for(int i = 0; i < n; i++)
  13.             parents[i] = i;
  14.     }
  15.    
  16.     int find(int num){
  17.         if(parents[num] == num)
  18.             return num;
  19.         return parents[num] = find(parents[num]);
  20.     }
  21.     bool unite(int a, int b){
  22.         int parentA = find(a);
  23.         int parentB = find(b);
  24.        
  25.         if(parentA == parentB)
  26.             return false;
  27.        
  28.         parents[parentA] = parentB;
  29.         return true;
  30.     }
  31. };
  32.  
  33. int main() {
  34.     int n, m, u, v, w;
  35.     cin >> n >> m;
  36.     UnionFind uf(n);
  37.     vector<pair<int, pair<int, int>>> edges;
  38.  
  39.     for(int i = 0; i < m; i++){
  40.         cin >> u >> v >> w;
  41.         edges.push_back({w, {v, u}});
  42.     }
  43.    
  44.     sort(edges.rbegin(), edges.rend());
  45.     long long sum = 0;
  46.     for(auto edge : edges){
  47.         if(!uf.unite(edge.second.first, edge.second.second))
  48.             sum += edge.first;
  49.     }
  50.     cout << sum;
  51.     return 0;
  52. }
  53.  
Advertisement
Add Comment
Please, Sign In to add comment