作为一个【NOIP+,省选-】算法,这个算法真的很暴力。同样是最大流,跑得比EK不知快到哪里去了。首先是一个

广度优先搜索()
{
按照可用路径上节点的访问顺序标号。
然后判断一下能否到汇点。
如果不能(汇点没有被标号),那么返回不行。
否则返回行。
}
然后,只要能找到到汇点的路,就进行一个
深度优先搜索(当前到的那个节点了,现在的最大流)
{
维护一个当前用过的流量 = 0。
对于它的每条连接儿子节点的边:
如果这个儿子被编的号是它的号加一:
那么最大流就变成了min(儿子能流的流量,当前的流量)。
当然,当前的流量要继续深搜。
儿子的入边减去最大流。
儿子的出边加上最大流。
当前用过的流量加上最大流。
如果当前用过的流量等于最大流的话:
就返回当前用过的流量
如果当前用过的流量是0的话
就把当前节点的值设为-1(不走了)
否则
就返回当前用过的流量。
} 算法主体()
{
只要还能广度优先搜索:
答案就加上深度优先搜索(源点,正无穷)。
} 输出答案就好啦!
bool bfs()
{
std::queue<int> q;
q.push(S);
std::memset(pre, 0, sizeof pre);
while (!q.empty())
{
int x = q.front();
q.pop();
for (int t = head[x]; t; t = next[t])
if (!pre[lis[t]] && v[t])
{
pre[lis[t]] = pre[x] + 1;
q.push(lis[t]);
}
}
if (!pre[T])
return false;
return true;
} int dfs(int pos, int flow)
{
if (pos == T)
return flow;
int w, t, used = 0;
for (int t = head[pos]; t; t = next[t])
{
if (v[t] && pre[lis[t]] == pre[pos] + 1)
{
w = Dinic(lis[t], std::min(flow - used, v[t]));
used += w;
v[t] -= w;
v[t + 1] += w;
if (used == flow)
return flow;
}
}
if (!used)
pre[pos] = -1;
return used;
} void Dinic()
{
while (bfs())
ans += dfs(S, INT_MAX);
}

『算法』Dinic求最大流的更多相关文章

  1. 算法模板——Dinic网络最大流 2

    实现功能:同Dinic网络最大流 1 这个新的想法源于Dinic费用流算法... 在费用流算法里面,每次处理一条最短路,是通过spfa的过程中就记录下来,然后顺藤摸瓜处理一路 于是在这个里面我的最大流 ...

  2. 【最大流之ek算法】HDU1532 求最大流

    本来是继续加强最短路的训练,但是遇到了一个最短路 + 最大流的问题,最大流什么鬼,昨天+今天学习了一下,应该对ek算法有所了解,凭借学习后的印象,自己完成并ac了这个最大流的模板题 题目大意:都是图论 ...

  3. 算法模板——Dinic网络最大流 1

    实现功能:同sap网络最大流 今天第一次学Dinic,感觉最大的特点就是——相当的白话,相当的容易懂,而且丝毫不影响复杂度,顶多也就是代码长个几行 主要原理就是每次用spfa以O(n)的时间复杂度预处 ...

  4. 洛谷 P2765 魔术球问题 (dinic求最大流,最小边覆盖)

    P2765 魔术球问题 题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2 ...

  5. ZOJ-2364 Data Transmission 分层图阻塞流 Dinic+贪心预流

    题意:给定一个分层图,即只能够在相邻层次之间流动,给定了各个顶点的层次.要求输出一个阻塞流. 分析:该题直接Dinic求最大流TLE了,网上说采用Isap也TLE,而最大流中的最高标号预流推进(HLP ...

  6. dinic算法求最大流的学习

    http://trp.jlu.edu.cn/software/net/lssx/4/4.38.htm http://www.cnblogs.com/zen_chou/archive/0001/01/0 ...

  7. 最大流算法(Edmons-Karp + Dinic 比较) + Ford-Fulkson 简要证明

    Ford-Fulkson用EK实现:483ms #include <cstdio> #include <cstring> #define min(x,y) (x>y?y: ...

  8. 算法模板——Dinic最小费用最大流

    实现功能:输入M,N,S,T:接下来M行输入M条弧的信息(包括起点,终点,流量,单位费用):实现功能是求出以S为源点,T为汇点的网络最大流的最小费用 其实相当的像Dinic最大流呐= = 还是spfa ...

  9. POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]

    题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...

随机推荐

  1. 解决此问题:Oracle 删除用户时报 “必须指定 CASCADE 以删除 'SE'”,

    这说明你要删除的oracle 用户"SE" 下面还有数据库对象,如 table, view 等,这样你删除用户时必须加选项 cascade:drop user se cascade ...

  2. SEQ序号与ACK序号理解总结

    备查 SEQ序号与ACK序号理解总结

  3. 跨站的艺术-XSS Fuzzing 的技巧

    作者 | 张祖优(Fooying)  腾讯云 云鼎实验室 对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做Fuzzing:同样是Fuzzing, ...

  4. jQuery购物车

    效果图 HTML代码:(非表格方式) <div class="nav2"> <input type="checkbox" class=&quo ...

  5. 搭建 redis 3.2.8服务器

    实验环境 redis 3.2.8 + RHEL 7.3 系统 软件下载地址 http://download.redis.io/releases/redis-3.2.8.tar.gz #注意,我的软件包 ...

  6. php获取checkbox数组的表单数据

    提交表单的时候,对于checkbox多选框,name="field[]",此时php获取的数组为:从0开始的索引数组:如果name="field[n]" 有数字 ...

  7. Android-----js和android的互调

    Android-----js和android的互调   http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/We ...

  8. 玩转SSH(五):Struts + Spring + MyBatis(注解版)

    本文将在 玩转SSH(四):Struts + Spring + MyBatis 的基础上进行一些小的改动,将原本是 xml 配置方式的项目,改成注解的配置方式. 要将项目改成注解方式,一般是将在 Sp ...

  9. 实现一个自己的promise

    这是小弟的一篇开篇小作,如有不当之处,请各位道友批评指正.本文将探讨Promise的实现. 一.ES6中的Promise 1.简介 据说js很早就实现了Promise,我是不知道的,我第一次接触Pro ...

  10. PHP对象相关知识点的总结

    对象传递:一种说法是"PHP对象是通过引用传递的",更准确的说法是别名(标识符)传递,即它们都保存着同一个标识符(ID)的拷贝,这个标识符指向同一个对象的真正内容. <?ph ...