Advertisement
999ms

Untitled

Feb 23rd, 2020
436
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define all(x) begin(x),end(x)
  3. #define make_unique(x) sort(all(x));x.erase(unique(all(x)),x.end());
  4. #define remax(x,y) (x < y ? x = y, true : false)
  5. #define remin(x,y) (x > y ? x = y, true : false)
  6. #define size(x) int(x.size())
  7.  
  8. using namespace std;
  9. using ll = long long;
  10. using pii = pair<int,int>;
  11.  
  12. vector<pair<ll, int>> g[80][80];
  13.  
  14. ll Solve0(int n) {
  15.   ll ans = 2e9;
  16.   for (int i = 0; i < n; i++) {
  17.     ll cur = 0;
  18.     for (int p = 0; p < size(g[0][0]); p++) {
  19.       int v = g[0][0][p].second;
  20.       if (v == 0) continue;
  21.       cur += g[0][0][p].first;
  22.       break;
  23.     }
  24.     remin(ans, cur);
  25.   }
  26.   return ans;
  27. }
  28.  
  29. ll Solve1(int n) {
  30.   ll ans = 2e9;
  31.   for (int i = 0; i < n; i++) {
  32.     ll cur = 0;
  33.     for (int p = 0; p < size(g[0][i]); p++) {
  34.       int v = g[0][i][p].second;
  35.       if (v == i || v == 0) continue;
  36.       cur += g[0][i][p].first;
  37.       break;
  38.     }
  39.     for (int p = 0; p < size(g[i][0]); p++) {
  40.       int v = g[i][0][p].second;
  41.       if (v == i || v == 0) continue;
  42.       cur += g[i][0][p].first;
  43.       break;
  44.     }
  45.     remin(ans, cur);
  46.   }
  47.   return ans;
  48. }  
  49.  
  50. ll Solve2(int n) {
  51.   ll ans = 2e9;
  52.   for (int i = 0; i < n; i++)
  53.     for (int j = 0; j < n; j++) {
  54.       ll cur = 0;
  55.       for (int p = 0; p < size(g[0][i]); p++) {
  56.         int v = g[0][i][p].second;
  57.         if (v == i || v == j || v == 0) continue;
  58.         cur += g[0][i][p].first;
  59.         break;
  60.       }
  61.       for (int p = 0; p < size(g[i][j]); p++) {
  62.         int v = g[i][j][p].second;
  63.         if (v == i || v == j || v == 0) continue;
  64.         cur += g[i][j][p].first;
  65.         break;
  66.       }
  67.       for (int p = 0; p < size(g[j][0]); p++) {
  68.         int v = g[j][0][p].second;
  69.         if (v == i || v == j || v == 0) continue;
  70.         cur += g[j][0][p].first;
  71.         break;
  72.       }
  73.       remin(ans, cur);
  74.     }
  75.   return ans;
  76. }  
  77.  
  78. ll Solve3(int n) {
  79.   ll ans = 2e9;
  80.   for (int i = 0; i < n; i++)
  81.     for (int j = 0; j < n; j++)
  82.       for (int k = 0; k < n; k++) {
  83.         ll cur = 0;
  84.         for (int p = 0; p < size(g[0][i]); p++) {
  85.           int v = g[0][i][p].second;
  86.           if (v == i || v == j || v == k ||  v == 0) continue;
  87.           cur += g[0][i][p].first;
  88.           break;
  89.         }
  90.         for (int p = 0; p < size(g[i][j]); p++) {
  91.           int v = g[i][j][p].second;
  92.           if (v == i || v == j || v == k ||  v == 0) continue;
  93.           cur += g[i][j][p].first;
  94.           break;
  95.         }
  96.         for (int p = 0; p < size(g[j][k]); p++) {
  97.           int v = g[j][k][p].second;
  98.           if (v == i || v == j || v == k || v == 0) continue;
  99.           cur += g[j][k][p].first;
  100.           break;
  101.         }
  102.         for (int p = 0; p < size(g[k][0]); p++) {
  103.           int v = g[k][0][p].second;
  104.           if (v == i || v == j || v == k ||  v == 0) continue;
  105.           cur += g[k][0][p].first;
  106.           break;
  107.         }
  108.         remin(ans, cur);
  109.       }
  110.        
  111.   return ans;
  112. }  
  113.  
  114. ll Solve4(int n) {
  115.   ll ans = 2e9;
  116.   for (int i = 0; i < n; i++)
  117.     for (int j = 0; j < n; j++)
  118.       for (int k = 0; k < n; k++)
  119.         for (int l = 0; l < n; l++) {
  120.           ll cur = 0;
  121.           for (int p = 0; p < size(g[0][i]); p++) {
  122.             int v = g[0][i][p].second;
  123.             if (v == i || v == j || v == k || v == l || v == 0) continue;
  124.             cur += g[0][i][p].first;
  125.             break;
  126.           }
  127.           for (int p = 0; p < size(g[i][j]); p++) {
  128.             int v = g[i][j][p].second;
  129.             if (v == i || v == j || v == k || v == l || v == 0) continue;
  130.             cur += g[i][j][p].first;
  131.             break;
  132.           }
  133.           for (int p = 0; p < size(g[j][k]); p++) {
  134.             int v = g[j][k][p].second;
  135.             if (v == i || v == j || v == k || v == l || v == 0) continue;
  136.             cur += g[j][k][p].first;
  137.             break;
  138.           }
  139.           for (int p = 0; p < size(g[k][l]); p++) {
  140.             int v = g[k][l][p].second;
  141.             if (v == i || v == j || v == k || v == l || v == 0) continue;
  142.             cur += g[k][l][p].first;
  143.             break;
  144.           }
  145.           for (int p = 0; p < size(g[l][0]); p++) {
  146.             int v = g[l][0][p].second;
  147.             if (v == i || v == j || v == k || v == l || v == 0) continue;
  148.             cur += g[l][0][p].first;
  149.             break;
  150.           }
  151.           remin(ans, cur);
  152.         }
  153.        
  154.   return ans;
  155. }  
  156.  
  157.  
  158. int Solve(int n, int k) {
  159.   if (k == 4) {
  160.     return Solve4(n);
  161.   } else if (k == 3) {
  162.     return Solve3(n);
  163.   } else if (k == 2) {
  164.     return Solve2(n);
  165.   } else if (k == 1) {
  166.     return Solve1(n);
  167.   } else if (k == 0) {
  168.     return Solve0(n);
  169.   }
  170.   return 0;
  171. }  
  172.  
  173. int main() {
  174.   ios_base::sync_with_stdio(false);
  175.   cin.tie(nullptr);
  176.   cout.tie(nullptr);
  177.   int n, k;
  178.   cin >> n >> k;
  179.   k /= 2;
  180.   vector<vector<ll>> gin(n, vector<ll> (n));
  181.   for (int i = 0; i < n; i++) {
  182.     for (int j = 0; j < n; j++) {
  183.       cin >> gin[i][j];
  184.     }
  185.     gin[i][i] = 2e9;
  186.   }
  187.   for (int i = 0; i < n; i++) {
  188.     for (int j = 0; j < n; j++) {
  189.       for (int k = 0; k < n; k++) {
  190.         g[i][j].push_back({gin[i][k] + gin[k][j], k});
  191.       }
  192.     }
  193.   }
  194.   for (int i = 0; i < n; i++) {
  195.     for (int j = 0; j < n; j++) {
  196.       sort(all(g[i][j]));
  197.     }
  198.   }
  199.   cout << Solve(n, k - 1) << endl;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement