Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long
- using namespace std;
- const int INF = 1e18L;
- inline void min_self(int& a, int b) {
- a = min(a, b);
- }
- int32_t main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int N, K;
- cin >> N >> K;
- vector < bool > viz(N + 1);
- vector < int > d(N + 1, INF);
- for(int i = 0; i < K; ++i) {
- int x;
- cin >> x;
- viz[x] = true;
- d[x] = 0;
- }
- vector < vector < int > > a(N + 1, vector < int >(N + 1, INF));
- for(int i = 1; i <= N; ++i)
- for(int j = 1; j <= N; ++j)
- cin >> a[i][j];
- for(int i = 1; i <= N; ++i)
- if(!viz[i])
- for(int j = 1; j <= N; ++j)
- if(viz[j])
- min_self(d[i], a[i][j]);
- for(int k = 0; k < N - K; ++k) {
- int pmax = 0;
- for(int i = 1; i <= N; ++i)
- if(!viz[i] && d[i] < d[pmax])
- pmax = i;
- viz[pmax] = true;
- for(int i = 1; i <= N; ++i)
- if(!viz[i] && d[i] > a[pmax][i])
- d[i] = a[pmax][i];
- }
- int ans = 0;
- for(int i = 1; i <= N; ++i)
- ans += d[i];
- cout << ans;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement