【模板】EK求最大流
来源:互联网 发布:三得利乌龙茶 知乎 编辑:程序博客网 时间:2024/06/13 09:02
求解最大流问题的最简便方法
但是效率不是很理想
参考博客:网络流-最大流
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=505,maxe=40005;int n,e,que[maxn],fa[maxn],id[maxn],ans;bool vis[maxn];struct data{ int son[maxe],nxt[maxe],lnk[maxn],tot; int flw[maxe],cap[maxe]; void add(int x,int y,int w){ son[++tot]=y;nxt[tot]=lnk[x];lnk[x]=tot; flw[tot]=0;cap[tot]=w; }}a;inline int red(){ int tot=0;char ch=getchar(); while (ch<'0'||'9'<ch) ch=getchar(); while ('0'<=ch&&ch<='9') tot=tot*10+ch-48,ch=getchar(); return tot;}bool bfs(){ memset(vis,0,sizeof(vis)); int hed=0,til=1; que[1]=1;vis[1]=1; while (hed!=til) for (int j=a.lnk[que[++hed]];j;j=a.nxt[j]) if (!vis[a.son[j]]&&a.cap[j]>a.flw[j]){ que[++til]=a.son[j];vis[a.son[j]]=1; fa[a.son[j]]=que[hed];id[a.son[j]]=j; if (a.son[j]==n) return 1; } return 0;}int main(){ n=red(),e=red();a.tot=1; for (int i=1,x,y,w;i<=e;i++) x=red(),y=red(),w=red(),a.add(x,y,w),a.add(y,x,0); while (bfs()){ int Min=0x3f3f3f3f; for (int x=n;x!=1;x=fa[x]) Min=min(Min,a.cap[id[x]]-a.flw[id[x]]); ans+=Min; for (int x=n;x!=1;x=fa[x]) a.flw[id[x]]+=Min,a.flw[id[x]^1]-=Min; } printf("%d",ans); return 0;}
阅读全文
2 0
- 【模板】EK求最大流
- 最大流EK算法模板
- 最大流EK算法模板
- 网络流--求最大流:EK算法
- EK(BFS)求最大流的算法模板(邻接表)
- HDU_1532 && HDU_3549(最大流EK算法模板)
- 最大流问题(EK算法模板)
- HDU1532(最大流EK算法模板题)
- 最大流DFS(EK)算法模板
- HDOJ1532 最大流 BFS + EK 算法 模板
- poj 1273 Drainage Ditches---EK求最大流
- 【网络流】最大流:Drainage Ditches【EK模板】
- 【网络流】最大流:PIGS【EK模板、建图题】
- 网络流之最大流算法模板EK
- 【网络流之最大流】HDU3549Flow Problem【EK模板】
- poj 1273 Drainage Ditches(最大流的EK算法模板)
- hdu 3549 Flow Problem(最大流EK算法模板)
- 网络最大流增广路模板(EK & Dinic)
- winpython下载安装
- Unity2d Sqlite
- xss攻击
- 【OpenCV3图像处理】形态学 --- 膨胀、腐蚀、开运算 闭运算、形态学梯度、顶帽运算、黑帽运算
- 夹逼定理
- 【模板】EK求最大流
- Python爬虫--《山大主页》
- 计算机视觉三大顶级国际会议和国外知名期刊投稿
- C++/MFC-GDI主要对象(Bitmap、CBrush、CFont、CPalette、CPen和CRgn)
- 日常训练 20170602 B君的教育
- 图像处理-神奇的卷积核
- post,get区别
- 【剑指offer】面试题05:从尾到头打印链表
- MySQL数据库操作以及创建、修改和删除表