网络流EdmondsKarp算法模板理解】的更多相关文章

先推荐一个讲网络流的博客,我的网络流知识均吸收于此   传送门 EdmondsKarp算法基本思想:从起点到终点进行bfs,只要存在路,说明存在增广路径,则取这部分路 权值最小的一部分,即为增广路径(也就是这一部分路的最大流量).然后将这条路上的正向权值都减去min,反向权值都加上min(即,m[i][j]-min,m[j][i]+min,为什么等会再解释).然后重复此操作,最终就得到了最大流. 先上模板(也是取自于刚才的博客,真的写的很精简很好懂). 邻接矩阵版本. #include <que…
POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdio.h> #include <algorithm> #include <queue> #include <string.h> /* POJ 1273 dinic算法模板 边是有向的,而且存在重边,且这里重边不是取MAX,而是累加和 */ using namespace…
今天自习课没事干,看书自学了一下网络流中的EK算法.(求最大流) 设s为源点,t为汇点,C为容量矩阵,F为流量矩阵,f为最大流量. 1.初始化F,f 2.用BFS在残量网络中找到一条从s到t的最短增广路T,如果T不存在,算法结束. 最短增广路就是最短路径(s→t) 一边(u,v)被增广完后,在残量网络中就不存在(u,v)这条边,只有(v,u)这条边了.(即不存在(u,v)这条路径) 3.m=min(u,v)∈T{C(u,v)-F(u,v)} (最短增广路径中残量网络中最小的边) 4.f+=m 5…
\(EK\)算法的思想就是每一次找一条增广路进行增广. 注意几个点: 存图时\(head\)数组要设为\(-1\). 存图的代码是这样的: inline void add(int u, int v, int w) { ver[tot] = v, fro[tot] = u, edge[tot] = w, nxt[tot] = head[u], head[u] = tot++; ver[tot] = u, fro[tot] = v, edge[tot] = 0, nxt[tot] = head[v]…
题意: 农场主有f种食物,d种饮料,n头牛. 接下来的n行每行第一个数代表第i头牛喜欢吃的食物数量,和第i头牛喜欢喝的饮料数目. 接下来分别是喜欢的食物和饮料的编号. 求解:农场主最多能保证几头牛同时能吃到喜欢的食物和喜欢的饮料. 思路: 从源点到每种食物加流量为1的边,保证每种食物只能被吃一次. 将每头牛分为两个点,连一条流量为1的边,保证每头牛最多只能吃一份食物喝一份饮料. 将每种饮料和汇点都进行连接,同样流量为1. 将牛喜欢的食物和牛进行连边流量为1,将另一组代表牛的点和喜欢的饮料进行连边…
这篇博客讲得很好 #include<queue> #include<stdio.h> #include<string.h> using namespace std; const int MAXN=205; const int INF=0x3f3f3f3f; int r[MAXN][MAXN]; bool vis[MAXN]; int pre[MAXN]; int m,n; bool bfs(int s,int t) { int p; memset(pre,-1,size…
这就是以后我的板子啦~~~ #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 444 int tot,next[N],first[N],w[N],v[N],n,m,ch[N]; void add(int from,int to,int weight){ v[tot]=to;w[tot]=weight…
Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 45 Accepted Submission(s): 38   Problem Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorit…
\(EK\) 算法模板 #include <iostream> #include <queue> #include<string.h> using namespace std; #define arraysize 201 int maxData = 0x7fffffff; int capacity[arraysize][arraysize]; //记录残留网络的容量 int flow[arraysize]; //标记从源点到当前节点实际还剩多少流量可用 int pre[…
题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clover patch. This means that the clover is covered by water for awhile and takes…