当前位置: 首页 > news >正文

最大流

最大流

Dinic 解

使用 \(\tt Dinic\) 算法,理论最坏复杂度为 \(\mathcal O(N^2M)\) ,例题范围:\(N=1200,\ m=5\times 10^3\) 。一般步骤:\(\tt BFS\) 建立分层图,无回溯 \(\tt DFS\) 寻找所有可行的增广路径。封装:求从点 \(S\) 到点 \(T\) 的最大流。

template<typename T> struct Flow_ {const int n;const T inf = numeric_limits<T>::max();struct Edge {int to;T w;Edge(int to, T w) : to(to), w(w) {}};vector<Edge> ver;vector<vector<int>> h;vector<int> cur, d;Flow_(int n) : n(n + 1), h(n + 1) {}void add(int u, int v, T c) {h[u].push_back(ver.size());ver.emplace_back(v, c);h[v].push_back(ver.size());ver.emplace_back(u, 0);}bool bfs(int s, int t) {d.assign(n, -1);d[s] = 0;queue<int> q;q.push(s);while (!q.empty()) {auto x = q.front();q.pop();for (auto it : h[x]) {auto [y, w] = ver[it];if (w && d[y] == -1) {d[y] = d[x] + 1;if (y == t) return true;q.push(y);}}}return false;}T dfs(int u, int t, T f) {if (u == t) return f;auto r = f;for (int &i = cur[u]; i < h[u].size(); i++) {auto j = h[u][i];auto &[v, c] = ver[j];auto &[u, rc] = ver[j ^ 1];if (c && d[v] == d[u] + 1) {auto a = dfs(v, t, std::min(r, c));c -= a;rc += a;r -= a;if (!r) return f;}}return f - r;}T work(int s, int t) {T ans = 0;while (bfs(s, t)) {cur.assign(n, 0);ans += dfs(s, t, inf);}return ans;}
};
using Flow = Flow_<int>;

预流推进 HLPP

理论最坏复杂度为 \(\mathcal O(N^2\sqrt M)\) ,例题范围:\(N=1200,\ m=1.2\times 10^5\)

template <typename T> struct PushRelabel {const int inf = 0x3f3f3f3f;const T INF = 0x3f3f3f3f3f3f3f3f;struct Edge {int to, cap, flow, anti;Edge(int v = 0, int w = 0, int id = 0) : to(v), cap(w), flow(0), anti(id) {}};vector<vector<Edge>> e; vector<vector<int>> gap;vector<T> ex; // 超额流vector<bool> ingap;vector<int> h;int n, gobalcnt, maxH = 0;T maxflow = 0;PushRelabel(int n) : n(n), e(n + 1), ex(n + 1), gap(n + 1) {}void addedge(int u, int v, int w) {e[u].push_back({v, w, (int)e[v].size()});e[v].push_back({u, 0, (int)e[u].size() - 1});}void PushEdge(int u, Edge &edge) {int v = edge.to, d = min(ex[u], 1LL * edge.cap - edge.flow);ex[u] -= d;ex[v] += d;edge.flow += d;e[v][edge.anti].flow -= d;if (h[v] != inf && d > 0 && ex[v] == d && !ingap[v]) {++gobalcnt;gap[h[v]].push_back(v);ingap[v] = 1;}}void PushPoint(int u) {for (auto k = e[u].begin(); k != e[u].end(); k++) {if (h[k->to] + 1 == h[u] && k->cap > k->flow) {PushEdge(u, *k);if (!ex[u]) break;}}if (!ex[u]) return;if (gap[h[u]].empty()) {for (int i = h[u] + 1; i <= min(maxH, n); i++) {for (auto v : gap[i]) {ingap[v] = 0;}gap[i].clear();}}h[u] = inf;for (auto [to, cap, flow, anti] : e[u]) {if (cap > flow) {h[u] = min(h[u], h[to] + 1);}}if (h[u] >= n) return;maxH = max(maxH, h[u]);if (!ingap[u]) {gap[h[u]].push_back(u);ingap[u] = 1;}}void init(int t, bool f = 1) {ingap.assign(n + 1, 0);for (int i = 1; i <= maxH; i++) {gap[i].clear();}gobalcnt = 0, maxH = 0;queue<int> q;h.assign(n + 1, inf);h[t] = 0, q.push(t);while (q.size()) {int u = q.front();q.pop(), maxH = h[u];for (auto &[v, cap, flow, anti] : e[u]) {if (h[v] == inf && e[v][anti].cap > e[v][anti].flow) {h[v] = h[u] + 1;q.push(v);if (f) {gap[h[v]].push_back(v);ingap[v] = 1;}}}}}T work(int s, int t) {init(t, 0);if (h[s] == inf) return maxflow;h[s] = n;ex[s] = INF;ex[t] = -INF;for (auto k = e[s].begin(); k != e[s].end(); k++) {PushEdge(s, *k);}while (maxH > 0) {if (gap[maxH].empty()) {maxH--;continue;}int u = gap[maxH].back();gap[maxH].pop_back();ingap[u] = 0;PushPoint(u);if (gobalcnt >= 10 * n) {init(t);}}ex[s] -= INF;ex[t] += INF;return maxflow = ex[t];}
};
http://www.zskr.cn/news/29205.html

相关文章:

  • 最长路(topsort+DP算法)
  • 缩点(Tarjan 算法)
  • 常见概念
  • CNCF项目记录2025-10
  • 代理
  • 双碳目标下,MyEMS 为何成为制造企业的 “刚需工具”?
  • 树上路径交
  • 点分治 / 树的重心
  • 树论大封装(直径+重心+中心)
  • 书评-谋杀黄昏
  • 徐州信息技术服务管理体系认证渠道口碑榜:聚焦机构资质、服务案例及合规性评估
  • 完整教程:【汽车篇】AI深度学习在汽车零部件外观检测——铝铸件中的应用
  • 附加数据文件失败:操作系统错误 5:“5(拒绝访问。)”。 CREATE DATABASE 失败。无法创建列出的某些文件名
  • 20251024- 使用shell脚本分库定时备份MySQL数据
  • 2025年口碑好的食品级贴体盒,榴莲贴体盒实力源头
  • 2025年诚信的液压水渠成型机,全自动水渠成型机厂家最新权威推荐榜
  • 2025年10月扬州公考面试机构全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 2025年耐用的陶瓷纤维异性件,硅酸铝纤维陶瓷纤维实力源头加工
  • 2025年口碑好的空气能地暖管,德国品牌地暖管厂家最新TOP推荐榜
  • 2025 年接触角测量仪厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 2025年诚信的不锈钢网片,304不锈钢网片厂家最新推荐排行榜
  • 2025年耐用的美狮台球杆推荐TOP生产厂家
  • 2025年知名的光伏储能柜,智能储能柜推荐TOP品牌厂家
  • ISCSI技术原理与运维实践指南
  • 2025 年搅拌机设备厂家最新推荐排行榜:聚焦磁混凝系统 / 发酵罐 / 刮泥机 / 推进式 / 脱硫侧搅拌机,精选优质企业品牌
  • 山海鲸列表组件常用功能分享
  • MyEMS 的 “智慧大脑”:能耗建模、异常预警与优化策略的技术逻辑
  • 2025 年厌氧胶源头厂家最新推荐榜,技术实力与市场口碑深度解析的优质品牌合集
  • 2025年靠谱的智能沙发,家用沙发批发销售
  • MaopaiJD 建议 国家 在每辆汽车征收 年度停车费 每辆小汽车可停在全国城市 规划停车位中