题目链接

本篇博客延续上篇博客(最大流Dinic算法)的内容,此次使用EK算法解决最大流问题。

EK算法思想:在图中搜索一条从源点到汇点的扩展路,需要记录这条路径,将这条路径的最大可行流量 liu 增加到结果ans中,然后反向从汇点到源点更新这条路径上的每条边的权值(减去此次的liu),同时反向边的权值也需要更新(加上此次的liu)。然后再搜索新的扩展路……,循环,直到找不到新的扩展路,此时的ans就是最大流了。

注:EK算法解决最大流时,我看别人都是使用矩阵建立的图,这样反向更新扩展路径上的边权时,只需要之前记录每个点的父亲节点即可。我是在前一篇的Dinic的前向星代码上修改为EK算法,由父亲和孩子节点编号不能直接得出连接的边号,所以需要另外用一个变量 edgeIndex[v] 记录从 u 到 v 的边号,这样方便反向修改边权值。

代码如下:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <queue>
using namespace std;
const int N = ;
const int MAXN = 0x3fffffff; struct Edge {
int to;
int value;
int next;
}e[ * N*N];
int head[N], cnt;
int p[N], fa[N], edgeIndex[N];
int n, np, nc, m; void insert(int u, int v, int value) {
e[++cnt].to = v;
e[cnt].value = value;
e[cnt].next = head[u];
head[u] = cnt;
} void init() {
memset(head, -, sizeof(head));
cnt = -;
} int BFS() {
int ans = ;
while ()
{
memset(p, -, sizeof(p));
queue<int> Q;
Q.push();
p[] = MAXN;
while (!Q.empty()) {
int u = Q.front();
Q.pop();
for (int edge = head[u]; edge != -; edge = e[edge].next) {
int v = e[edge].to;
if (p[v] ==- && e[edge].value > ) {
p[v] = min(p[u], e[edge].value);
fa[v] = u;
edgeIndex[v] = edge;
Q.push(v);
if (v == n + ) goto endw;
}
}
}
endw:;
if (p[n+] == -) return ans;
else {
ans += p[n + ];
int x = n + ;
while (x) {
int edge = edgeIndex[x];
e[edge].value -= p[n + ];
e[edge ^ ].value += p[n + ];
x = fa[x];
}
}
}
} int main()
{
while (scanf("%d%d%d%d", &n, &np, &nc, &m) != EOF) {
init();
int u, v, z;
for (int i = ; i < m; i++) {
scanf(" (%d,%d)%d", &u, &v, &z);
insert(u + , v + , z);
insert(v + , u + , );
}
for (int i = ; i < np; i++) {
scanf(" (%d)%d", &u, &z);
insert(, u + , z);
insert(u + , , );
}
for (int i = ; i < nc; i++) {
scanf(" (%d)%d", &u, &z);
insert(u + , n + , z);
insert(n + , u + , );
}
printf("%d\n", BFS());
}
}

网络流之最大流EK --- poj 1459的更多相关文章

  1. 网络流之最大流Dinic --- poj 1459

    题目链接 Description A power network consists of nodes (power stations, consumers and dispatchers) conne ...

  2. POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Network / FZU 1161 (网络流,最大流)

    POJ 1459 Power Network / HIT 1228 Power Network / UVAlive 2760 Power Network / ZOJ 1734 Power Networ ...

  3. POJ 3436 ACM Computer Factory (网络流,最大流)

    POJ 3436 ACM Computer Factory (网络流,最大流) Description As you know, all the computers used for ACM cont ...

  4. poj 1459 多源多汇点最大流

    Sample Input 2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20 7 2 3 13 (0,0)1 (0,1)2 (0,2)5 (1,0)1 (1,2)8 (2,3)1 ...

  5. POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流)

    POJ 2711 Leapin' Lizards / HDU 2732 Leapin' Lizards / BZOJ 1066 [SCOI2007]蜥蜴(网络流,最大流) Description Yo ...

  6. [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码

    [洛谷P3376题解]网络流(最大流)的实现算法讲解与代码 更坏的阅读体验 定义 对于给定的一个网络,有向图中每个的边权表示可以通过的最大流量.假设出发点S水流无限大,求水流到终点T后的最大流量. 起 ...

  7. 【转】最大流EK算法

    转自:http://www.cnblogs.com/kuangbin/archive/2011/07/26/2117636.html 图-1 如图-1所示,在这个运输网络中,源点S和汇点T分别是1,7 ...

  8. hdu 4940 Destroy Transportation system( 无源汇上下界网络流的可行流推断 )

    题意:有n个点和m条有向边构成的网络.每条边有两个花费: d:毁坏这条边的花费 b:重建一条双向边的花费 寻找这样两个点集,使得点集s到点集t满足 毁坏全部S到T的路径的费用和 > 毁坏全部T到 ...

  9. 【Luogu2711】小行星(网络流,最大流)

    [Luogu2711]小行星(网络流,最大流) 题面 题目描述 星云中有n颗行星,每颗行星的位置是(x,y,z).每次可以消除一个面(即x,y或z坐标相等)的行星,但是由于时间有限,求消除这些行星的最 ...

随机推荐

  1. 03webpack--输入webpack--自动打包

    如何实现时时跟新我写的代码 此时就需要有一个配置文件了 webpack.config.js这个文件 这个文件是在跟目录下哦 webpack是基于node去构建的 所以你的依法和node还是很相似的哦 ...

  2. Tomcat 学习总结(1) --Servlet技术

    在Web应用中,Servlet是一门重要的技术,Servlet是利用Java类编写的服务端程序,与平台架构,协议无关. JSP的实质就是Servlet,因为所有的JSP页面传回服务端时要转为Servl ...

  3. luoguP5094 [USACO04OPEN]MooFest 狂欢节

    get 到的 这种需要求 含 max 的式子,枚举最大值的方法非常普遍. 类似的,还有含 min , gcd 的式子,枚举他们也很普遍 主要难点 我们首先想到,先按 v 从小到大排序,因为这样既可以简 ...

  4. c# 第41节 异常处理

    本节内容: 1:捕获异常两种方式 2:处理异常的两种方式 3:实例处理异常 4:手动触发异常 5:预定义异常类有哪些 6:自定义异常 1:捕获异常 第一种 捕获:只能知道发生了异常 第二种捕获: 可以 ...

  5. c# 第37节 接口的实现与继承

    本节内容: 1:接口继承注意 2:开发封闭原则: 3:实例解释接口的作用 1:接口继承注意 接口的继承: :类继承具有单根性,接口可多重继承: :接口继承多个接口的时候,派生接口名与父接口用冒号隔开, ...

  6. [LOJ 6432][PKUSC 2018]真实排名

    [LOJ 6432][PKUSC 2018]真实排名 题意 给定 \(n\) 个选手的成绩, 选中其中 \(k\) 个使他们的成绩翻倍. 对于每个选手回答有多少种方案使得他的排名不发生变化. \(n\ ...

  7. 微信jssdk的getLocalImgData拿到的base64不完整

    最近上传图片接口突然出现偶尔报错,错误内容是 图片的base64 在调用 Convert.FromBase64String 报错了. 我从log里面拿到一些 出错的 base64. 发现都有一个特征 ...

  8. 海边拾贝-F-第三方项目

    第三方网站,不定期更新: 陈浩个人博客: https://coolshell.cn/ 阮一峰个人博客:http://www.ruanyifeng.com/blog/2015/02/make.html ...

  9. HBase的java操作,最新API。(查询指定行、列、插入数据等)

    关于HBase环境搭建和HBase的原理架构,请见笔者相关博客. 1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase. 首先是pom依赖: <dependency ...

  10. POJ 2594 (传递闭包 + 最小路径覆盖)

    题目链接: POJ 2594 题目大意:给你 1~N 个点, M 条有向边.问你最少需要多少个机器人,让它们走完所有节点,不同的机器人可以走过同样的一条路,图保证为 DAG. 很明显是 最小可相交路径 ...