Advertisement
matheus_monteiro

Copa do Mundo

Jun 9th, 2021
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.98 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 110
  3. using namespace std;
  4.  
  5. int n, m;
  6. vector<array<int, 3>> edges;
  7. int pai[MAX], sz[MAX];
  8.  
  9. int find(int x){
  10.     if(pai[x] == x)
  11.         return x;
  12.     return pai[x] = find(pai[x]);
  13. }
  14.  
  15. void join(int a, int b){
  16.     a = find(a); b = find(b);
  17.     if(a == b) return;
  18.     if(sz[a] > sz[b]) swap(a, b);
  19.     pai[a] = b;
  20.     sz[b] += sz[a];
  21. }
  22.  
  23. int main(){    
  24.     int f, r;
  25.    
  26.     cin >> n >> f >> r;
  27.    
  28.     for(int i = 0; i < f + r; i++){
  29.         int u, v, w;
  30.         cin >> u >> v >> w;
  31.         edges.push_back({w, u, v});
  32.     }
  33.    
  34.     for(int i = 1; i <= n; i++)
  35.         pai[i] = i, sz[i] = 1;
  36.    
  37.     sort(edges.begin(), edges.begin() + f);
  38.     sort(edges.begin() + f, edges.begin() + f + r);
  39.    
  40.     int cost = 0;
  41.  
  42.     for(int i = 0; i < edges.size(); i++) {
  43.         auto [w, u, v] = edges[i];
  44.         if(find(u) != find(v)){
  45.             join(u, v);
  46.             cost += w;
  47.         }
  48.     }
  49.  
  50.     cout << cost << endl;
  51.    
  52.     return 0;
  53. }
  54.  
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement