Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define all(x) begin(x),end(x)
- #define make_unique(x) sort(all(x));x.erase(unique(all(x)),x.end());
- #define remax(x,y) (x < y ? x = y, true : false)
- #define remin(x,y) (x > y ? x = y, true : false)
- #define size(x) int(x.size())
- using namespace std;
- using ll = long long;
- using pii = pair<int,int>;
- vector<pair<ll, int>> g[80][80];
- ll Solve0(int n) {
- ll ans = 2e9;
- for (int i = 0; i < n; i++) {
- ll cur = 0;
- for (int p = 0; p < size(g[0][0]); p++) {
- int v = g[0][0][p].second;
- if (v == 0) continue;
- cur += g[0][0][p].first;
- break;
- }
- remin(ans, cur);
- }
- return ans;
- }
- ll Solve1(int n) {
- ll ans = 2e9;
- for (int i = 0; i < n; i++) {
- ll cur = 0;
- for (int p = 0; p < size(g[0][i]); p++) {
- int v = g[0][i][p].second;
- if (v == i || v == 0) continue;
- cur += g[0][i][p].first;
- break;
- }
- for (int p = 0; p < size(g[i][0]); p++) {
- int v = g[i][0][p].second;
- if (v == i || v == 0) continue;
- cur += g[i][0][p].first;
- break;
- }
- remin(ans, cur);
- }
- return ans;
- }
- ll Solve2(int n) {
- ll ans = 2e9;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++) {
- ll cur = 0;
- for (int p = 0; p < size(g[0][i]); p++) {
- int v = g[0][i][p].second;
- if (v == i || v == j || v == 0) continue;
- cur += g[0][i][p].first;
- break;
- }
- for (int p = 0; p < size(g[i][j]); p++) {
- int v = g[i][j][p].second;
- if (v == i || v == j || v == 0) continue;
- cur += g[i][j][p].first;
- break;
- }
- for (int p = 0; p < size(g[j][0]); p++) {
- int v = g[j][0][p].second;
- if (v == i || v == j || v == 0) continue;
- cur += g[j][0][p].first;
- break;
- }
- remin(ans, cur);
- }
- return ans;
- }
- ll Solve3(int n) {
- ll ans = 2e9;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- for (int k = 0; k < n; k++) {
- ll cur = 0;
- for (int p = 0; p < size(g[0][i]); p++) {
- int v = g[0][i][p].second;
- if (v == i || v == j || v == k || v == 0) continue;
- cur += g[0][i][p].first;
- break;
- }
- for (int p = 0; p < size(g[i][j]); p++) {
- int v = g[i][j][p].second;
- if (v == i || v == j || v == k || v == 0) continue;
- cur += g[i][j][p].first;
- break;
- }
- for (int p = 0; p < size(g[j][k]); p++) {
- int v = g[j][k][p].second;
- if (v == i || v == j || v == k || v == 0) continue;
- cur += g[j][k][p].first;
- break;
- }
- for (int p = 0; p < size(g[k][0]); p++) {
- int v = g[k][0][p].second;
- if (v == i || v == j || v == k || v == 0) continue;
- cur += g[k][0][p].first;
- break;
- }
- remin(ans, cur);
- }
- return ans;
- }
- ll Solve4(int n) {
- ll ans = 2e9;
- for (int i = 0; i < n; i++)
- for (int j = 0; j < n; j++)
- for (int k = 0; k < n; k++)
- for (int l = 0; l < n; l++) {
- ll cur = 0;
- for (int p = 0; p < size(g[0][i]); p++) {
- int v = g[0][i][p].second;
- if (v == i || v == j || v == k || v == l || v == 0) continue;
- cur += g[0][i][p].first;
- break;
- }
- for (int p = 0; p < size(g[i][j]); p++) {
- int v = g[i][j][p].second;
- if (v == i || v == j || v == k || v == l || v == 0) continue;
- cur += g[i][j][p].first;
- break;
- }
- for (int p = 0; p < size(g[j][k]); p++) {
- int v = g[j][k][p].second;
- if (v == i || v == j || v == k || v == l || v == 0) continue;
- cur += g[j][k][p].first;
- break;
- }
- for (int p = 0; p < size(g[k][l]); p++) {
- int v = g[k][l][p].second;
- if (v == i || v == j || v == k || v == l || v == 0) continue;
- cur += g[k][l][p].first;
- break;
- }
- for (int p = 0; p < size(g[l][0]); p++) {
- int v = g[l][0][p].second;
- if (v == i || v == j || v == k || v == l || v == 0) continue;
- cur += g[l][0][p].first;
- break;
- }
- remin(ans, cur);
- }
- return ans;
- }
- int Solve(int n, int k) {
- if (k == 4) {
- return Solve4(n);
- } else if (k == 3) {
- return Solve3(n);
- } else if (k == 2) {
- return Solve2(n);
- } else if (k == 1) {
- return Solve1(n);
- } else if (k == 0) {
- return Solve0(n);
- }
- return 0;
- }
- int main() {
- ios_base::sync_with_stdio(false);
- cin.tie(nullptr);
- cout.tie(nullptr);
- int n, k;
- cin >> n >> k;
- k /= 2;
- vector<vector<ll>> gin(n, vector<ll> (n));
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- cin >> gin[i][j];
- }
- gin[i][i] = 2e9;
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- for (int k = 0; k < n; k++) {
- g[i][j].push_back({gin[i][k] + gin[k][j], k});
- }
- }
- }
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- sort(all(g[i][j]));
- }
- }
- cout << Solve(n, k - 1) << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement