diff options
| author | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-11-16 01:24:14 +0100 |
|---|---|---|
| committer | Gloria Mundi <gloria@gloria-mundi.eu> | 2024-11-16 01:24:14 +0100 |
| commit | 98567ec798aa8ca2cfbcb85c774dd470f30e30d4 (patch) | |
| tree | 5113d5cc24d1ad5f93810b6442ce584a36950dc8 /graph/capacityScaling.cpp | |
| parent | ad3856a6b766087df0036de0b556f4700a6498c9 (diff) | |
| parent | 8d11c6c8213f46f0fa19826917c255edd5d43cb1 (diff) | |
mzuenni tests
Diffstat (limited to 'graph/capacityScaling.cpp')
| -rw-r--r-- | graph/capacityScaling.cpp | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/graph/capacityScaling.cpp b/graph/capacityScaling.cpp deleted file mode 100644 index 90ae654..0000000 --- a/graph/capacityScaling.cpp +++ /dev/null @@ -1,44 +0,0 @@ -struct edge { - int from, to; - ll f, c; -}; - -vector<edge> edges; -vector<vector<int>> adj; -int s, t, dfsCounter; -vector<int> visited; -ll capacity; - -void addEdge(int from, int to, ll c) { - adj[from].push_back(sz(edges)); - edges.push_back({from, to, 0, c}); - adj[to].push_back(sz(edges)); - edges.push_back({to, from, 0, 0}); -} - -bool dfs(int v) { - if (v == t) return true; - if (visited[v] == dfsCounter) return false; - visited[v] = dfsCounter; - for (int id : adj[v]) { - if (edges[id].c >= capacity && dfs(edges[id].to)) { - edges[id].c -= capacity; edges[id ^ 1].c += capacity; - edges[id].f += capacity; edges[id ^ 1].f -= capacity; - return true; - }} - return false; -} - -ll maxFlow(int source, int target) { - capacity = 1ll << 62; - s = source; - t = target; - ll flow = 0; - visited.assign(sz(adj), 0); - dfsCounter = 0; - while (capacity) { - while (dfsCounter++, dfs(s)) flow += capacity; - capacity /= 2; - } - return flow; -} |
