Advertisement
artemgf

План электрификации

Jun 12th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #pragma once
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #define _USE_MATH_DEFINES
  4. #include <iostream>
  5. #include <string>
  6. #include <map>
  7. #include <set>
  8. #include <algorithm>
  9. #include <vector>
  10. #include <stdio.h>
  11. #include <cmath>
  12. #include <math.h>
  13. #include <queue>
  14. #include <stack>
  15. #include <climits>
  16. #include <deque>
  17. #include <ctime>
  18. #include <iomanip>
  19. #include <bitset>
  20. #include <unordered_map>
  21. #include <unordered_set>
  22.  
  23. using namespace std;
  24.  
  25. typedef long long ll;
  26. typedef unsigned long long ull;
  27. typedef unsigned int ui;
  28.  
  29. #define mh() make_heap()
  30. #define poph() pop_heap()
  31. #define pushh() push_heap()
  32. #define sor(n) n.begin(), n.end()
  33. #define rsor(n) n.rbegin(), n.rend()
  34. #define mp make_pair
  35. #define files freopen("input.txt", "rt", stdin); freopen("output.txt", "wt", stdout)
  36. #define p(T) pair<T,T>
  37. #define toch(x) cout.precision(x), cout.setf(ios::fixed)
  38. #define znac(l) abs(l)/l
  39. #define IOS ios::sync_with_stdio(false)
  40. #define IOSB cin.tie(0), cout.tie(0);
  41. const ll ok = ll(1e9 + 7);
  42.  
  43.  
  44. void decs(ll ans, vector<pair<ll, p(ll)>>graf)
  45. {
  46.    
  47. }
  48. int dsu_get(int v, vector<ll> &pt) {
  49.     return (v == pt[v]) ? v : (pt[v] = dsu_get(pt[v],pt));
  50. }
  51.  
  52. void dsu_unite(int a, int b, vector<ll> &pt) {
  53.     a = dsu_get(a,pt);
  54.     b = dsu_get(b,pt);
  55.     if (rand() & 1)
  56.         swap(a, b);
  57.     if (a != b)
  58.         pt[a] = b;
  59. }
  60.  
  61. int main()
  62. {
  63.     IOSB;
  64.     IOS;
  65. #ifdef TheCompiler
  66.     files;
  67. #endif
  68.     ll n, k;
  69.     cin >> n >> k;
  70.     vector<ll> pt(n+1);
  71.     for (int i = 1; i <= n; i++)
  72.     {
  73.         pt[i] = i;
  74.     }
  75.     vector<ll>el;
  76.     ll p;
  77.     cin >> p;
  78.     el.push_back(p);
  79.     ll r = p;
  80.     for (int i = 2; i <= k; i++)
  81.     {
  82.         cin >> p;
  83.         el.push_back(p);
  84.         dsu_unite(p, r, pt);
  85.     }
  86.     vector<pair<ll,p(ll)>>graf;
  87.  
  88.     for (int i = 1; i <= n; i++)
  89.         for (int j = 1; j <= n; j++)
  90.         {
  91.             ll p;
  92.             cin >> p;
  93.             if (i != j)
  94.             {
  95.                 graf.push_back( { p,{ i,j } });
  96.             }
  97.         }
  98.     sort(sor(graf));
  99.     ll ans = 0;
  100.     for (int i = 0; i < graf.size(); i++)
  101.     {
  102.         if (dsu_get(graf[i].second.first, pt) != dsu_get(graf[i].second.second, pt))
  103.         {
  104.             ans += graf[i].first;
  105.             dsu_unite(graf[i].second.first, graf[i].second.second, pt);
  106.         }
  107.     }
  108.     cout << ans;
  109.     return 0;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement