Advertisement
Alex_tz307

1982. Electrification Plan - Timus

Nov 4th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. const int INF = 1e18L;
  7.  
  8. inline void min_self(int& a, int b) {
  9.     a = min(a, b);
  10. }
  11.  
  12. int32_t main() {
  13.     ios_base::sync_with_stdio(false);
  14.     cin.tie(nullptr);
  15.     cout.tie(nullptr);
  16.     int N, K;
  17.     cin >> N >> K;
  18.     vector < bool > viz(N + 1);
  19.     vector < int > d(N + 1, INF);
  20.     for(int i = 0; i < K; ++i) {
  21.         int x;
  22.         cin >> x;
  23.         viz[x] = true;
  24.         d[x] = 0;
  25.     }
  26.     vector < vector < int > > a(N + 1, vector < int >(N + 1, INF));
  27.     for(int i = 1; i <= N; ++i)
  28.         for(int j = 1; j <= N; ++j)
  29.             cin >> a[i][j];
  30.     for(int i = 1; i <= N; ++i)
  31.         if(!viz[i])
  32.             for(int j = 1; j <= N; ++j)
  33.                 if(viz[j])
  34.                     min_self(d[i], a[i][j]);
  35.     for(int k = 0; k < N - K; ++k) {
  36.         int pmax = 0;
  37.         for(int i = 1; i <= N; ++i)
  38.             if(!viz[i] && d[i] < d[pmax])
  39.                 pmax = i;
  40.         viz[pmax] = true;
  41.         for(int i = 1; i <= N; ++i)
  42.             if(!viz[i] && d[i] > a[pmax][i])
  43.                 d[i] = a[pmax][i];
  44.     }
  45.     int ans = 0;
  46.     for(int i = 1; i <= N; ++i)
  47.         ans += d[i];
  48.     cout << ans;
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement