EK算法:

int fir[maxn];
int u[maxm],v[maxm],cap[maxm],flow[maxm],nex[maxm];
int e_max;
int p[maxn],q[maxn],d[maxn]; void add_edge(int _u,int _v,int _w)
{
int e;
e=e_max++;
u[e]=_u;v[e]=_v;cap[e]=_w;
nex[e]=fir[u[e]];fir[u[e]]=e;
e=e_max++;
u[e]=_v;v[e]=_u;cap[e]=0;
nex[e]=fir[u[e]];fir[u[e]]=e;
} int max_flow(int s,int t)
{
memset(flow,0,sizeof flow);
int total_flow=0; for (;;)
{
memset(d,0,sizeof d);
d[s]=INF;
int f=0,r=0;
q[0]=s;
while (f<=r)
{
int _u=q[f++];
for (int e=fir[_u];~e;e=nex[e])
{
if (!d[v[e]] && cap[e]>flow[e])
{
q[++r]=v[e];
p[v[e]]=e;
d[v[e]]=min(d[u[e]],cap[e]-flow[e]);
}
}
} if (d[t]==0) break; for (int e=p[t];;e=p[u[e]])
{
flow[e]+=d[t];
flow[e^1]-=d[t];
if (u[e]==s) break;
} total_flow+=d[t];
} return total_flow;
}

Dinic算法(效率远高于EK算法):

int fir[maxn];
int u[maxm],v[maxm],cap[maxm],flow[maxm],nex[maxm];
int e_max;
int iter[maxn],q[maxn],lv[maxn]; void add_edge(int _u,int _v,int _w)
{
int e;
e=e_max++;
u[e]=_u;v[e]=_v;cap[e]=_w;
nex[e]=fir[u[e]];fir[u[e]]=e;
e=e_max++;
u[e]=_v;v[e]=_u;cap[e]=0;
nex[e]=fir[u[e]];fir[u[e]]=e;
} void dinic_bfs(int s)
{
int f,r;
memset(lv,-1,sizeof lv);
q[f=r=0]=s;
lv[s]=0;
while(f<=r)
{
int x=q[f++];
for (int e=fir[x];~e;e=nex[e])
{
if (cap[e]>flow[e] && lv[v[e]]<0)
{
lv[v[e]]=lv[u[e]]+1;
q[++r]=v[e];
}
}
}
} int dinic_dfs(int _u,int t,int _f)
{
if (_u==t) return _f;
for (int &e=iter[_u];~e;e=nex[e])
{
if (cap[e]>flow[e] && lv[_u]<lv[v[e]])
{
int _d=dinic_dfs(v[e],t,min(_f,cap[e]-flow[e]));
if (_d>0)
{
flow[e]+=_d;
flow[e^1]-=_d;
return _d;
}
}
} return 0;
} int max_flow(int s,int t)
{ memset(flow,0,sizeof flow);
int total_flow=0; for (;;)
{
dinic_bfs(s);
if (lv[t]<0) return total_flow;
memcpy(iter,fir,sizeof iter);
int _f; while ((_f=dinic_dfs(s,t,INF))>0)
total_flow+=_f;
} return total_flow;
}

最新文章

  1. Apache部署django项目
  2. JavaScript 调试小技巧
  3. SpringMvc学习心得(五)控制器产生与构建
  4. [CareerCup] 10.7 Simplified Search Engine 简单的搜索引擎
  5. javascript中获取非行间样式的方法
  6. java线性表学习笔记(一)
  7. POJ3026——Borg Maze(BFS+最小生成树)
  8. Starling性能优化技巧十五则
  9. Rails3.2.3+ruby1.9.3 环境搭建,提示安全警告
  10. 误差逆传播(error BackPropagation, BP)算法推导及向量化表示
  11. python - XML文件及其操作
  12. 3DMax的OFusion插件的使用问题
  13. [无关IT]就这样在凌晨写一篇吧~
  14. 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识
  15. 网络编程中select模型和poll模型学习(linux)
  16. JSP——文件上传
  17. BBS(第三天) 如何吧用户上传的图片文件保存到本地
  18. uva-10954-贪心
  19. 中国剩余定理 (POJ 1006)
  20. Java对象与Map间相互转换

热门文章

  1. POI原生导入读取EXCEL
  2. CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建
  3. CAD控件使用教程 自定义实体的实现
  4. Uncaught TypeError: Cannot assign to read only property &#39;exports&#39; of object &#39;#&lt;Object&gt;&#39;
  5. 面试之Redis
  6. C# Word 类库
  7. js检测是哪个浏览器
  8. 在springBoot的控制台打印sql语句
  9. Python之面向对象继承和派生
  10. Discuz 论坛修改admin账户密码