Advertisement
YEZAELP

CUBE: Worker

Jun 27th, 2021
856
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using lli = long long;
  5. const int N = 1e3 + 10;
  6. using pi = pair <int, int>;
  7. using pii = pair <int, pi>;
  8. vector <pii> Path;
  9. int parent[N], T[N], B[N];
  10. int n;
  11.  
  12. int root(int u){ return parent[u] = parent[u] == u ? u: root(parent[u]);}
  13.  
  14. int mrg(int u, int v){
  15.     u = root(u);
  16.     v = root(v);
  17.     parent[v] = u;
  18. }
  19.  
  20. int main(){
  21.  
  22.     int n;
  23.     scanf("%d", &n);
  24.  
  25.     for(int i=0;i<=n;i++)
  26.         parent[i] = i;
  27.  
  28.     for(int i=1;i<=n;i++){
  29.         scanf("%d", &T[i]);
  30.         Path.push_back({ T[i], {0, i} });
  31.     }
  32.  
  33.     for(int i=1;i<=n;i++)
  34.         scanf("%d", &B[i]);
  35.  
  36.     for(int i=1;i<=n;i++){
  37.         for(int j=1;j<=n;j++){
  38.             Path.push_back({ B[i] + B[j], {i, j} });
  39.         }
  40.     }
  41.  
  42.     sort(Path.begin(), Path.end());
  43.  
  44.     lli ans = 0;
  45.     for(auto wuv: Path){
  46.         int u = wuv.second.first;
  47.         int v = wuv.second.second;
  48.         int w = wuv.first;
  49.         if(root(u) == root(v)) continue;
  50.         mrg(u, v);
  51.         ans += w;
  52.     }
  53.  
  54.     printf("%lld", ans);
  55.  
  56.     return 0;
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement