Advertisement
leoanjos

Ada and Banquet

Jun 23rd, 2022
1,015
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define long long long int
  6.  
  7. int N;
  8. vector<vector<int>> A;
  9.  
  10. int min_cut() {
  11.     int ans = INT_MAX;
  12.     for (int i = 1; i < N; i++) {
  13.         vector<int> w(N, 0);
  14.         vector<bool> vis(N, false);
  15.  
  16.         int prev = -1, v = 0, cnt = 1, cut;
  17.         while (cnt <= N - i) {
  18.             vis[v] = true;
  19.             int nxt = -1;
  20.             cut = 0;
  21.  
  22.             for (int j = 0; j < N; j++) {
  23.                 w[j] += A[v][j];
  24.                 if (!vis[j] && w[j] > cut)
  25.                     nxt = j, cut = w[j];
  26.             }
  27.  
  28.             cnt++;
  29.             prev = v;
  30.             v = nxt;
  31.         }
  32.  
  33.         ans = min(ans, cut);
  34.         for (int j = 0; j < N; j++) {
  35.             if (j != prev) {
  36.                 A[j][prev] += A[j][v];
  37.                 A[prev][j] += A[v][j];
  38.             }
  39.  
  40.             A[j][v] = 0;
  41.         }
  42.     }
  43.  
  44.     return ans;
  45. }
  46.  
  47. int main() {
  48.     ios_base::sync_with_stdio(false);
  49.     cin.tie(NULL);
  50.  
  51.     cin >> N;
  52.  
  53.     A.assign(N, vector<int>(N));
  54.     for (int i = 0; i < N; i++)
  55.         for (int j = 0; j < N; j++)
  56.             cin >> A[i][j];
  57.  
  58.     int ans = 2 * min_cut();
  59.     cout << ans << "\n";
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement