题目描述

给定 nn 个点,mm 条有向边,给定每条边的容量,求从点 ss 到点 tt 的最大流。

输入格式

第一行包含四个正整数nn、mm、ss、tt,用空格分隔,分别表示点的个数、有向边的个数、源点序号、汇点序号。

接下来mm行每行包含三个正整数u_iui​、v_ivi​、c_ici​,用空格分隔,表示第ii条有向边从u_iui​出发,到达v_ivi​,容量为c_ici​

输出格式

一个整数,表示ss到tt的最大流

输入输出样例

输入 #1 

7 14 1 7
1 2 5
1 3 6
1 4 5
2 3 2
2 5 3
3 2 2
3 4 3
3 5 3
3 6 7
4 6 5
5 6 1
6 5 1
5 7 8
6 7 7

输出 #1 

14

输入 #2 

10 16 1 2
1 3 2
1 4 2
5 2 2
6 2 2
3 5 1
3 6 1
4 5 1
4 6 1
1 7 2147483647
9 2 2147483647
7 8 2147483647
10 9 2147483647
8 5 2
8 6 2
3 10 2
4 10 2

输出 #2 

8
//500ms 秒掉洛谷推流问题
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
typedef long long LL;
typedef long long F_type;
const int MAXN = 1.2e3 + 10, INF = 0x3f3f3f3f;
const LL LINF = (LL)INF << 32 | INF;
struct Edge
{int v, rev;F_type cap;Edge(int a, F_type b, int c) : v(a), rev(c), cap(b) {}
};
const F_type maxf=LINF;
F_type exflow[MAXN];
int h[MAXN], cnt[MAXN];
int ht, N, S, T, labelcnt;
vector<Edge> G[MAXN];
vector<int> hq[MAXN];
void clear(int n = MAXN - 1)
{ht = labelcnt = 0;for (int i = 0; i <= n; i++)G[i].clear();
}
void addEdge(int u, int v, F_type cap)
{G[u].emplace_back(v, cap, G[v].size());G[v].emplace_back(u, 0, G[u].size() - 1);
}
void update(int u, int newh)
{++labelcnt;if (h[u] != N + 1)--cnt[h[u]];h[u] = newh;if (newh == N + 1)return;++cnt[ht = newh];if (exflow[u] > 0)hq[newh].push_back(u);
}
void globalRelabel()
{queue<int> q;for (int i = 0; i <= N + 1; i++)hq[i].clear();for (int i = 0; i <= N; i++)h[i] = N + 1, cnt[i] = 0;q.push(T);labelcnt = ht = h[T] = 0;while (!q.empty()){int u = q.front();q.pop();for (Edge& e : G[u]){if (h[e.v] == N + 1 && G[e.v][e.rev].cap){update(e.v, h[u] + 1);q.push(e.v);}}ht = h[u];}
}
void push(int u, Edge& e)
{if (exflow[e.v] == 0)hq[h[e.v]].push_back(e.v);F_type df = min(exflow[u], e.cap);e.cap -= df;G[e.v][e.rev].cap += df;exflow[u] -= df;exflow[e.v] += df;
}
void discharge(int u)
{int nxth = N + 1;for (Edge& e : G[u])if (e.cap){if (h[u] == h[e.v] + 1){push(u, e);if (exflow[u] <= 0)return;}elsenxth = min(nxth, h[e.v] + 1);}if (cnt[h[u]] > 1)update(u, nxth);elsefor (; ht >= h[u]; hq[ht--].clear()){for (int& j : hq[ht])update(j, N + 1);}
}
F_type maxFlow(int s, int t, int n)
{S = s, T = t, N = n;memset(exflow, 0, sizeof(exflow));exflow[S] = maxf;exflow[T] = -maxf;globalRelabel();for (Edge& e : G[S])push(S, e);for (; ht >= 0; --ht){while (!hq[ht].empty()){int u = hq[ht].back();hq[ht].pop_back();discharge(u);if (labelcnt > (N << 2))globalRelabel();}}return exflow[T] + maxf;
}int main()
{int n, m, s, t, u, v, w;scanf("%d%d%d%d", &n, &m, &s, &t);while (m--){scanf("%d%d%d", &u, &v, &w);addEdge(u, v, w);}printf("%d", maxFlow(s, t, n));return 0;
}

图论--网络流--最大流 洛谷P4722(hlpp)相关推荐

  1. 图论-网络流⑦-费用流解题

    图论-网络流⑦-费用流解题 上一篇:图论-网络流⑥-费用流 下一篇:图论-网络流⑧-有上下界的网络流 参考文献: https://www.luogu.com.cn/blog/user9012/solu ...

  2. 图论——最长路(洛谷 P1807)

    题目选自洛谷P1807 对于一个有向无环图,可以采取广搜将结点依次搜索,记录当前结点的最长路并在循环过程中不断更新. 题目描述 设 G 为有 n 个顶点的带权有向无环图,G 中各顶点的编号为 1 到  ...

  3. 图论——图的遍历(洛谷 P3916)

    题目选自洛谷P3916 反向建边 + dfs 按题目来每次考虑每个点可以到达点编号最大的点,不如考虑较大的点可以反向到达哪些点 循环从N到1,则每个点i能访问到的结点的A值都是i 每个点访问一次,这个 ...

  4. 图论算法——幻象迷宫(洛谷 P1363)

    题目选自洛谷P1363 大概就是说给出一个01迷宫类的地图,按照这个地图来扩展新地图,类似这样 然后问你是不是###可以走无限远. ###那么,我们可以很清晰的意识到,如果可以从点(x,y)出发,达到 ...

  5. [洛谷P4722]【模板】最大流 加强版 / 预流推进

    会$TLE$... C++ Code:(HLPP) #pragma GCC optimize(3) #pragma GCC optimize("unroll-loops") #in ...

  6. 图论 —— 网络流 —— 最大流 —— Dinic 算法

    [概述] Dinic 算法在 EK 算法的基础上进行了优化,其时间复杂度为 O(n*n*m). Dinic 在找增广路的时也是找最短增广路, 但与 EK 算法不同的是 Dinic 算法并不是每次 bf ...

  7. 教辅的组成(网络流果题 洛谷P1231)

    题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含且仅包含 ...

  8. 图论 —— 网络流 —— 费用流 —— 基于 Dijkstra 的费用流

    [概述] 在求解费用流时,大多数情况都是使用基于 SPFA 的 MCMF 算法,但有时某些毒瘤题会卡 SPFA,此时就要利用基于 Dijkstra 的费用流来求解. [算法原理] 基于 Dijkstr ...

  9. 图论 —— 网络流 —— 最大流 —— 压入与重标记算法

    [概述] 压入与重标记算法(Push-Relable Algorithms)又称预留推进算法,是 GoldBerg 与 Tarjan 共同发现的,时间复杂度为 O(V*V*E) 该算法与 EK .Di ...

最新文章

  1. 程序员的自我修养--链接、装载与库笔记:可执行文件的装载与进程
  2. 【selenium 3】 Mac 下测试环境搭建 Firefox 47+ gecko driver Mac
  3. Mosquitto配置文件说明
  4. 冬至日,诚邀你来杭州网易,一起吃着饺子畅聊「B2B增长」
  5. 局部变量和常量的性能分析
  6. codeblock socket 编译错误_从Linux源码看Socket(TCP)Client端的Connect
  7. xpwifi热点设置android,教你在XP电脑中开启设置WiFi热点使用的步骤
  8. (Activiti6.0.0)SpringProcessEngineConfiguration配置bean时属性注入不了,问题已经找到
  9. IIS7.5下的web.config 404应该如何配置
  10. html提示更新浏览器的代码,IE9及以下浏览器升级提示
  11. 列主元Guass消去法
  12. 微信小程序服务器被ddos攻击,网站被DDOS攻击了怎么办
  13. 由验证控件引起的IE的超级爆笑BUG
  14. 解决东方财富数据接口激活后仍显示reactive的问题
  15. 自然语言处理就业前景怎么样?
  16. 2019杭电多校 第七场 Kejin Player 6656(求期望值)
  17. Druid监控页面配置reset-enable的说明
  18. c语言画伯努利分布图像,C++ - 随机生成器 伯努利分布(bernoulli distribution) 的 详解 及 代码...
  19. 《量化投资与对冲基金入门》--量化投资--读书笔记(36)
  20. button layui 点击事件_解决layui中的form表单与button的点击事件冲突问题

热门文章

  1. Spring、Spring MVC、Struts2、、优缺点整理
  2. restful 接口 安全性设计
  3. Koa nuxt最佳实践前篇
  4. 聊聊ribbon的超时时间设置
  5. Redis--keys的通用操作
  6. 我理解Docker的过程2
  7. Microsoft System Center Configuration Manager 2007 工作流中文版
  8. 内存不能“read”
  9. Vue开发中有着原声app效果的滚动的第三方插件better-scroll在github的上面的运用方法及地址
  10. 9路棋盘java代码_Java ServiceContext类代码示例