最大流模板(Dinic)
来源:互联网 发布:美工发展前景 编辑:程序博客网 时间:2024/06/06 17:31
最大流模板:
#include<stdio.h>#include<iostream>using namespace std;const int oo=1e9;/**oo 表示无穷大*/const int mm=111111111;/**mm 表示边的最大数量,记住要是原图的两倍,在加边的时候都是双向的*/const int mn=999;/**mn 表示点的最大数量*/int node,src,dest,edge;/**node 表示节点数,src 表示源点,dest 表示汇点,edge 统计边数*/int ver[mm],flow[mm],next[mm];/**ver 边指向的节点,flow 边的容量 ,next 链表的下一条边*/int head[mn],work[mn],dis[mn],q[mn];void prepare(int _node, int _src,int _dest){ node=_node,src=_src,dest=_dest; for(int i=0; i<node; ++i)head[i]=-1; edge=0;}/**增加一条 u 到 v 容量为 c 的边*/void addedge( int u, int v, int c){ ver[edge]=v,flow[edge]=c,next[edge]=head[u],head[u]=edge++; ver[edge]=u,flow[edge]=0,next[edge]=head[v],head[v]=edge++;}/**广搜计算出每个点与源点的最短距离,如果不能到达汇点说明算法结束*/bool Dinic_bfs(){ int i,u,v,l,r=0; for(i=0; i<node; ++i)dis[i]=-1; dis[q[r++]=src]=0; for(l=0; l<r; ++l) for(i=head[u=q[l]]; i>=0; i=next[i]) if(flow[i]&&dis[v=ver[i]]<0) { /**这条边必须有剩余容量*/ dis[q[r++]=v]=dis[u]+1; if(v==dest) return 1; } return 0;}/**寻找可行流的增广路算法,按节点的距离来找,加快速度*/int Dinic_dfs( int u, int exp){ if(u==dest) return exp; /**work 是临时链表头,这里用 i 引用它,这样寻找过的边不再寻找*/ for( int &i=work[u],v,tmp; i>=0; i=next[i]) if(flow[i]&&dis[v=ver[i]]==dis[u]+1&&(tmp=Dinic_dfs(v,min(exp,flow[i])))>0) { flow[i]-=tmp; flow[i^1]+=tmp; /**正反向边容量改变*/ return tmp; } return 0;}int Dinic_flow(){ int i,ret=0,delta; while(Dinic_bfs()) { for(i=0; i<node; ++i)work[i]=head[i]; while(delta=Dinic_dfs(src,oo))ret+=delta; } return ret;}
0 0
- 最大流模板(Dinic)
- 最大流dinic模板
- 最大流Dinic模板
- 最大流Dinic模板
- 最大流Dinic模板
- 最大流dinic 模板
- 最大流dinic模板
- 最大流dinic模板
- 最大流:Dinic模板
- 最大流Dinic模板
- 最大流Dinic模板
- dinic最大流模板
- 最大流dinic模板
- dinic 最大流模板
- 网络最大流(dinic)【模板】
- 最大流模板(Dinic算法)
- 网络最大流(dinic)模板
- 【洛谷P3376】最大流模板(dinic)
- 关于任务二的小练习1的总结
- Unable to resolve target 'android-XX'问题
- 当JPA遇上MySQL表名全大写
- poj1068Parencodings
- pull解析
- 最大流模板(Dinic)
- 网络程序设计--第一个服务器程序
- ios7.0后,从左侧边缘向右滑动会自动返回上一级页面,但自定义的返回按钮在此情况下会崩
- Android禁止dialog自动消失
- 我的第一篇博客
- ajax
- docker学习笔记(二):Hello World
- NFS服务器免密码的配置
- [知其然不知其所以然-27] throttling after resume from suspend