#1369 : 网络流一·Ford-Fulkerson算法 模板题
http://hihocoder.com/problemset/problem/1369?sid=1108721
别人都说先学网络流再学二分图,但是我先学了二分图的,感觉网络流好高端啊。
首先对于原图,e[u][v],找到一条路径从be --> en后,要更新残余网络。
什么意思,其他东西自己百度。其实就是建反向边。
比如:
1 --> 2 w = 1
1 --> 3 w = 1
2 --> 3 w = 1
2 --> 4 w = 1
3 --> 4 w = 1
那么如果一开始网络流找到的增广路是1-->2-->3-->4后,整个图的最大流就是1,这样就错了。
应该是1-->2-->4和1-->3-->4,最大流是2.所以在2的时候,就要判断它应该流去那里了,如果每种情况都暴力一下, 复杂度是指数级。
但是如果建立反向边后,比如找到了1-->2-->3-->4,
则建立
4-->3 w = 1
3-->2 w = 1
2-->1 w = 1
这样做了的话,就可以继续找增广路,可以找到1-->3-->2-->4,贡献是1,
为什么可以这样呢?其实就是相当于把水流回去2那里,让2重新选。
#include <bits/stdc++.h>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL;
const int maxn = + ;
int e[maxn][maxn];
int pre[maxn], flow[maxn];
int n, m;
int bfs(int be, int en) {
queue<int> que;
memset(pre, false, sizeof pre);
pre[be] = -, flow[be] = inf;
que.push(be);
while (!que.empty()) {
int id = que.front();
que.pop();
if (id == en) break; // 找到增广路径
for (int i = ; i <= n; ++i) {
if (pre[i] == && e[id][i] > ) {
pre[i] = id;
flow[i] = min(flow[id], e[id][i]);
que.push(i);
}
}
}
if (pre[en] == ) return -;
else return flow[en];
}
int maxFlow(int be, int en) {
int sumFlow = ;
while (true) {
int res = bfs(be, en);
if (res == -) break; //找不到增广路
int u = pre[en], v = en;
while (u != -) {
e[u][v] -= res;
e[v][u] += res;
v = u;
u = pre[v];
}
sumFlow += res;
}
return sumFlow;
}
void work() {
scanf("%d%d", &n, &m);
for (int i = ; i <= m; ++i) {
int u, v, w;
scanf("%d%d%d", &u, &v, &w);
e[u][v] += w;
}
cout << maxFlow(, n) << endl;
} int main() {
#ifdef local
freopen("data.txt", "r", stdin);
// freopen("data.txt", "w", stdout);
#endif
work();
return ;
}
#1369 : 网络流一·Ford-Fulkerson算法 模板题的更多相关文章
- hdu 1711 KMP算法模板题
题意:给你两个串,问你第二个串是从第一个串的什么位置開始全然匹配的? kmp裸题,复杂度O(n+m). 当一个字符串以0为起始下标时.next[i]能够描写叙述为"不为自身的最大首尾反复子串 ...
- ACM/ICPC 之 网络流入门-Ford Fulkerson与SAP算法(POJ1149-POJ1273)
第一题:按顾客访问猪圈的顺序依次构图(顾客为结点),汇点->第一个顾客->第二个顾客->...->汇点 //第一道网络流 //Ford-Fulkerson //Time:47M ...
- POJ 3041 匈牙利算法模板题
一开始预习是百度的算法 然后学习了一下 然后找到了学长的ppt 又学习了一下.. 发现..居然不一样... 找了模板题试了试..百度的不好用 反正就是wa了..果然还是应当跟着学长混.. 图两边的点分 ...
- poj 1274 The Perfect Stall【匈牙利算法模板题】
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20874 Accepted: 942 ...
- Bellman-Ford算法模板题
POJ 3259 虫洞(Bellman-Ford判断有无负环的问题) 描述: 在探索他的许多农场时,Farmer John发现了许多令人惊叹的虫洞.虫洞是非常奇特的,因为它是一条单向路径,在您进入虫洞 ...
- POJ 1459 Power Network(网络最大流,dinic算法模板题)
题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数. 接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...
- HDU - 2255 奔小康赚大钱 KM算法 模板题
HDU - 2255 题意: 分配n所房子给n个家庭,不同家庭对一所房子所需缴纳的钱是不一样的,问你应当怎么分配房子,使得最后收到的钱最多. 思路: KM算法裸题.上模板 #include <i ...
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- [Bzoj2039]小Z的袜子 (莫队算法模板题)
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 11866 Solved: 5318[Sub ...
随机推荐
- leetcode 23. Merge k Sorted Lists(堆||分治法)
Merge k sorted linked lists and return it as one sorted list. 题意:把k个已经排好序的链表整合到一个链表中,并且这个链表是排了序的. 题解 ...
- ACM学习历程—HDU1719 Friend(数论)
Description Friend number are defined recursively as follows. (1) numbers 1 and 2 are friend number; ...
- DSP编程
File:isctype.c Line 68 DSP/BIOS程序启动顺序 CCS V5 使用教程一: 安装激活与创建工程 CCS V5 使用教程二:创建工程和配置软件仿真 CCS V5 使用教程三: ...
- 三 lambda表达式有什么用
(转载: https://mp.weixin.qq.com/s/-PHOc6p-qKJBktle28AUgA) 一: 直接把代码块赋值给变量 我们知道,对于一个Java变量,我们可以赋给其一个“值”. ...
- Scala Beginner
开始学习Scala,下面的内容大部分从Scala官网翻译过来,有几个地方翻译的不是很好,表述不清楚的地方大家可以浏览Scala官网,多指教. Scala offical website is http ...
- 深入理解和探究Java类加载机制
深入理解和探究Java类加载机制---- 1.java.lang.ClassLoader类介绍 java.lang.ClassLoader类的基本职责就是根据一个指定的类的名称,找到或者生成其对应的字 ...
- ssh无密码登录设置失败的 解决办法
因为要安装hadoop所以需要设置ssh无密码登录,SSH的安装就不在这里介绍了: 我的系统是ubuntu15.10,开始按照网上很多的步骤去配置,最后发现登录时还要密码,登录多次也是这样的情况 最后 ...
- 阿里云 centos7.2 云安装mysql
[root@iZ28gvqe4biZ ~]# rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm获取h ...
- 1.14不使用回车键来读取n个字符
read是一个重要的bash命令,它用于从键盘或标准输入中读取文本.可以使用read以交互的形式读取来自用户的输入,不过read能做的远不止这些.很多编程语言的输入库都是从键盘读取输入,且只有回车键按 ...
- eos表结构总结说明
EOS6.0 WORKFLOW 表结构说明 流程定义表(WFProcessDefine) 名称 代码 描述 流程定义ID processDefID 主键 流程定义名称 processDefName 业 ...