ACM练级日志:最大流的FF算法、匈(N)牙(T)利(R)算法
来源:互联网 发布:微办公软件 编辑:程序博客网 时间:2024/06/05 19:58
最大流的FF算法似乎是最简单的,即使是之前没怎么接触最大流的我也照着标程两下就会了。
FF算法大约是这么一个过程:不断地寻找源点到汇点的增广路,找到一个是一个,找不到了,那就已经是最大流了。找增广路的时候,假设我在s,我就看看我能看见谁,看他走过没有,能不能给我带来增广路,如果能的话就太好了,我也回答我能带来增广路,同时一个流就产生了。当然也要弄一条反向边,方便这个算法后悔。
二分图匹配的匈牙利算法也一样,过去老不会写,现在其实两句话就能说明白: 对于每一个还没有对象的点,都问问你有没有增广路,在看我所在的点有没有增广路的时候,我就看看我能看见谁,如果这个家伙还没对象,那我们就在一起吧;如果你有对象了,我就看看你的对象有没有增广路,他要是有增广路,就让他增广去吧,我们在一起吧…… 总的来讲匈牙利算法就是一个NTR算法= =
贴一个自己用的模板
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std; int map[300][300];int used[300];int n,m;const int INF= 2147483647; int DFS(int s, int t, int f){ if(s==t) return f;//找到终点了,此时剩下的流量就是能获得的流量 int i; for(i=1;i<=n;i++) { if(map[s][i] >0 && used[i] ==0)//从s开始找 { used[i]=1; int d=DFS(i, t, min(f, map[s][i]));//问有没有增广路 if(d>0) { map[s][i] -=d; map[i][s] +=d; return d; } } } return 0;} int maxflow(int s, int t){ int flow=0; while(true) { memset(used, 0, sizeof(used)); int f= DFS(s,t, INF);//不断找s到t的增广路 if(f == 0) return flow; //找不到了就回去 flow += f;//找到一个流量f的就赚了 }} void init(){ memset(map, 0, sizeof(map)); return ;} int main(){ while(scanf("%d %d", &m, &n) != EOF) { init(); int k1,k2, cap; int i; for(i=1;i<=m;i++) { scanf("%d %d %d", &k1, &k2, &cap); map[k1][k2] += cap; } int ans=maxflow(1,n); printf("%d\n", ans); } //system("pause"); return 0;}
0 0
- ACM练级日志:最大流的FF算法、匈(N)牙(T)利(R)算法
- 最大流的基本算法(ff算法&&dinic算法&&push-rebeal算法)poj1273
- ACM图算法——最大流(SAP算法)
- 最大N算法(前一版本的改进)
- 求最大最小值的O(3n/2)算法
- 一步一步写算法(之挑选最大的n个数)
- 求N个数的最大公因数(算法)
- 一步一步写算法(之挑选最大的n个数)
- 最大流问题以及FF算法
- (R/Python)t-SNE聚类算法实践指南
- ACM->最大流的dinic递归算法
- ACM练级日志:HDU 4735(ACM 成都网络赛) 重复覆盖与DLX
- 从n个自然数中任取r个数的所有组合(递归算法)
- 从n个自然数中任取r个数的所有组合(递归算法)
- 最大流的算法(EK算法)—>Edmonds-Karp算法(最短路径增广算法)
- acm题目--正整数n的加法组合的最大乘积的超快算法
- ACM练级日志:模板的使用
- HDU ACM 1532 Drainage Ditches->网络最大流模版题(EK算法实践)
- Android Handler Message总结
- ACM练级日志:带权并查集与食物链
- Android数据库高手秘籍(一)——SQLite命令
- sizeof与strlen的区别
- 省队以及NOI所需知识列表---转自matrix67
- ACM练级日志:最大流的FF算法、匈(N)牙(T)利(R)算法
- redhat切换用户前面是-bash-4.1$v
- 最短路
- Android学习Scroller(二)——ViewGroup调用scrollTo()
- POJ-3026 Borg Maze
- hdu-2504-分拆素数和
- ACM练级日志: CodeForces 414C 归并排序、逆序数和栈内存
- 0 \0 NULL 的区别
- Java集合类汇总记录-- apache.commons4(TreeList)