fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define Bismillah ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
  4. #define ll long long
  5.  
  6. void SemogaBisa() {
  7. ll n, m, k;
  8. cin >> n >> m >> k;
  9. vector<ll> b, g;
  10. b.resize(n); g.resize(m);
  11. vector<vector<ll>> adj(n, vector<ll>());
  12. vector<bool> vis (n, false);
  13.  
  14. for (ll i = 0; i < n; i++) cin >> b[i];
  15. for (ll i = 0; i < m; i++) cin >> g[i];
  16. sort(g.begin(), g.end());
  17.  
  18. for (ll i = 0; i < k; i++) {
  19. ll p, q;
  20. cin >> p >> q;
  21. p--; q--;
  22. adj[p].push_back(q);
  23. adj[q].push_back(p);
  24. }
  25.  
  26. ll total = 0;
  27. for (ll i = 0; i < n; i++) {
  28. if (!vis[i]) {
  29. vector<ll> comp;
  30. queue<ll> q;
  31. q.push(i);
  32. vis[i] = true;
  33. while (!q.empty()) {
  34. ll p = q.front(); q.pop();
  35. comp.push_back(p);
  36. for (auto v : adj[p]) {
  37. if (!vis[v]) { vis[v] = true; q.push(v); }
  38. }
  39. }
  40. vector<ll> gossip;
  41. for (auto x : comp) gossip.push_back(b[x]);
  42.  
  43. for(auto x : gossip)
  44. cout << x << " ";
  45. cout << endl;
  46.  
  47. ll mn = LLONG_MAX;
  48. for (auto G : g) {
  49. ll s = 0;
  50. for (auto h : gossip) s += abs(h-G);
  51. if (s < mn) mn = s;
  52. }
  53. total += mn;
  54.  
  55. }
  56. }
  57. cout << total << endl;
  58. }
  59.  
  60. int main() {
  61. Bismillah;
  62. SemogaBisa();
  63. return 0;
  64. }
  65.  
Success #stdin #stdout 0.01s 5288KB
stdin
8 4 6
10 20 30 40 50 60 70 80
30 40 50 60
1 8
2 7
3 5
3 6
5 6
6 8
stdout
10 80 60 30 50 
20 70 
40 
150