Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.23 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #define INF 10e9
  3. #include <iostream>
  4. #include <algorithm>
  5. #include <stdio.h>
  6. #include <queue>
  7. #include <stack>
  8. #include <climits>
  9. using namespace std;
  10.  
  11. vector <vector<int>> mas;
  12. vector <vector<int>> mas2;
  13.  
  14. vector<int> a;
  15. vector<int> a1;
  16. vector<int> a2;
  17. vector<int> u;
  18. queue<int> Queue;
  19.  
  20. int n,k, w = 0,sum = 0,n1,q,v;
  21. bool f = false;
  22.  
  23. void poisk_sh() {
  24.     a1[1] = 0;
  25.     Queue.push(1);
  26.  
  27.     while (!Queue.empty())
  28.     {
  29.         int m = Queue.front();
  30.         Queue.pop();
  31.         for (int i = 1; i <= n; i++) {
  32.             if ((mas[m][i] != 0) && (a1[i] == -1) && (i != m)) {
  33.                 a1[i] = a1[m] + 1;
  34.                 Queue.push(i);
  35.                 a2[i] = m;
  36.             }
  37.         }
  38.     }
  39. }
  40.  
  41. int main()
  42. {
  43.     //freopen("input.txt", "r", stdin);
  44.     //freopen("output.txt", "w", stdout);
  45.     cin >> n;
  46.  
  47.    
  48.     mas.resize(n+1);
  49.     mas2.resize(n+1);
  50.     for (long i = 1; i < n+1; i++)
  51.     {
  52.         mas[i].resize(n+1);
  53.         mas2[i].resize(n+1);
  54.     }
  55.     n1 = n;
  56.     a.resize(n + 1);
  57.     a1.resize(n + 1);
  58.     a2.resize(n + 1);
  59.     u.resize(n + 1);
  60.    
  61.    
  62.  
  63.     for (int i = 1; i <= n; i++)
  64.         for (int j = 1; j <= n; j++) {
  65.             cin >> mas[i][j];
  66.             mas2[i][j] = 0;
  67.         }
  68.    
  69.     while (f != true) {
  70.  
  71.         for (int i = 1; i <= n; i++) {
  72.             a1[i] = -1;
  73.             a2[i] = -1;
  74.         }
  75.         poisk_sh();
  76.  
  77.         if (a1[n] == -1) break;
  78.  
  79.         else {
  80.            q = v= a1[n];
  81.            u[v] = n;
  82.            k = a2[n];
  83.             while (a2[n] != -1) {
  84.                 v--;
  85.                 n = a2[n];
  86.                 u[v] = n;
  87.             }
  88.             int minimum = INT_MAX;
  89.             for (int i = 0; i < q; i++) {
  90.                 if (mas[u[i]][u[i + 1]] < minimum) {
  91.                     minimum = mas[u[i]][u[i + 1]];
  92.                 }
  93.             }
  94.             a[w] = minimum;
  95.  
  96.             for (int i = 0; i < q; i++) {
  97.                 mas[u[i]][u[i + 1]] = mas[u[i]][u[i + 1]] - a[w];
  98.                 mas2[u[i]][u[i + 1]] = mas2[u[i]][u[i + 1]] + a[w];
  99.             }
  100.             n = n1;
  101.             sum = sum + a[w];
  102.             w++;
  103.         }
  104.     }
  105.     cout << sum;
  106.     return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement