he_obviously

Untitled

May 4th, 2022 (edited)
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <map>
  4. #include <queue>
  5.  
  6. using namespace std;
  7.  
  8. const long long INF = INT64_MAX;
  9. int n, m;
  10. map<int, long long> c[501], f[501];
  11. vector<int> p, d;
  12.  
  13. bool bfs() {
  14.     fill(d.begin(), d.end(), -1);
  15.     queue<int> q;
  16.     d[1] = 0;
  17.     q.push(1);
  18.     while(!q.empty()) {
  19.         int v = q.front();
  20.         q.pop();
  21.         for (auto [to, flow] : f[v]) {
  22.             if (flow < c[v][to] && d[to] == -1) {
  23.                 d[to] = d[v] + 1;
  24.                 q.push(to);
  25.             }
  26.         }
  27.     }
  28.     return d[n] != -1;
  29. }
  30.  
  31. long long dfs(int i, long long flow){
  32.     if(i == n){
  33.         return flow;
  34.     }
  35.     for( ; p[i] <= n; ++p[i]){
  36.         int to = p[i];
  37.         if(d[to] == d[i] + 1 && c[i][to] - f[i][to] > 0) {
  38.             long long delta = dfs(to, min(flow, c[i][to] - f[i][to]));
  39.             if(delta > 0){
  40.                 f[i][to] += delta;
  41.                 f[to][i] -= delta;
  42.                 return delta;
  43.             }
  44.         }
  45.     }
  46.     return 0;
  47. }
  48.  
  49. int main() {
  50.  
  51.     cin >> n >> m;
  52.     p.resize(n + 1);
  53.     d.resize(n + 1);
  54.  
  55.     for (int i = 0; i < m; ++i) {
  56.         int from, to;
  57.         long long cap;
  58.         cin >> from >> to >> cap;
  59.         c[from][to] += cap;
  60.         f[from][to] = f[to][from] = 0;
  61.     }
  62.  
  63.     long long ans = 0;
  64.     while(bfs()) {
  65.         fill(p.begin(), p.end(), 1);
  66.         long long flow = dfs(1, INF);
  67.         while (flow != 0) {
  68.             ans += flow;
  69.             flow = dfs(1, INF);
  70.         }
  71.     }
  72.  
  73.     cout << ans;
  74.  
  75.     return 0;
  76. }
Add Comment
Please, Sign In to add comment