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

  1. 广度优先搜索()
  2. {
  3. 按照可用路径上节点的访问顺序标号。
  4. 然后判断一下能否到汇点。
  5. 如果不能(汇点没有被标号),那么返回不行。
  6. 否则返回行。
  7. }
  8. 然后,只要能找到到汇点的路,就进行一个
  9. 深度优先搜索(当前到的那个节点了,现在的最大流)
  10. {
  11. 维护一个当前用过的流量 = 0
  12. 对于它的每条连接儿子节点的边:
  13. 如果这个儿子被编的号是它的号加一:
  14. 那么最大流就变成了min(儿子能流的流量,当前的流量)。
  15. 当然,当前的流量要继续深搜。
  16. 儿子的入边减去最大流。
  17. 儿子的出边加上最大流。
  18. 当前用过的流量加上最大流。
  19. 如果当前用过的流量等于最大流的话:
  20. 就返回当前用过的流量
  21. 如果当前用过的流量是0的话
  22. 就把当前节点的值设为-1(不走了)
  23. 否则
  24. 就返回当前用过的流量。
  25. }
  26. 算法主体()
  27. {
  28. 只要还能广度优先搜索:
  29. 答案就加上深度优先搜索(源点,正无穷)。
  30. }
  31. 输出答案就好啦!
  1. bool bfs()
  2. {
  3. std::queue<int> q;
  4. q.push(S);
  5. std::memset(pre, 0, sizeof pre);
  6. while (!q.empty())
  7. {
  8. int x = q.front();
  9. q.pop();
  10. for (int t = head[x]; t; t = next[t])
  11. if (!pre[lis[t]] && v[t])
  12. {
  13. pre[lis[t]] = pre[x] + 1;
  14. q.push(lis[t]);
  15. }
  16. }
  17. if (!pre[T])
  18. return false;
  19. return true;
  20. }
  21. int dfs(int pos, int flow)
  22. {
  23. if (pos == T)
  24. return flow;
  25. int w, t, used = 0;
  26. for (int t = head[pos]; t; t = next[t])
  27. {
  28. if (v[t] && pre[lis[t]] == pre[pos] + 1)
  29. {
  30. w = Dinic(lis[t], std::min(flow - used, v[t]));
  31. used += w;
  32. v[t] -= w;
  33. v[t + 1] += w;
  34. if (used == flow)
  35. return flow;
  36. }
  37. }
  38. if (!used)
  39. pre[pos] = -1;
  40. return used;
  41. }
  42. void Dinic()
  43. {
  44. while (bfs())
  45. ans += dfs(S, INT_MAX);
  46. }

『算法』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. 跑马灯、短信与反射EditText

    1.1.跑马灯功能 Android自带支持跑马灯功能,实现此功能需要设置已下属性: android:ellipsize="marquee" // 必选,跑马灯样式 android: ...

  2. 解决HTML textarea 标签出现大量空格

    就是什么内容也不写,然后前面却有一堆空格 原因是 textarea标签换行了 <textarea cols=" id="serve_content" name=&q ...

  3. Android控件状态依赖框架

    在生产型Android客户端软件(企业级应用)开发中,界面可能存在多个输入(EditText)和多个操作(MotionEvent和KeyEvent),且操作依赖于输入的状态.如下图所示的场景: 设定图 ...

  4. 极客君教你破解隔壁妹子的wifi密码,成功率高达90%

    首先,给大家推荐一个我自己维护的网站: 开发者网址导航:http://www.dev666.com/ 破解wifi密码听起来很复杂,实际上也不是非常的复杂,极客君(微信公众帐号:极客峰)今天教大家如何 ...

  5. media query(媒体查询)和media type(媒体类型)

    media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面.media query(媒体查询)是对media ...

  6. 在React中使用CSS Modules设置样式

    最近,一直在看React...那真的是一个一直在学的过程啊,从配置环境webpack,到基础知识jsx,babel,es6,没有一个不是之前没有接触的.其实,我内心是兴奋的啊,毕竟,活着就是要接触一些 ...

  7. 【C++】智能指针详解(一):智能指针的引入

    智能指针是C++中一种利用RAII机制(后面解释),通过对象来管理指针的一种方式. 在C++中,动态开辟的内存需要我们自己去维护,在出函数作用域或程序异常退出之前,我们必须手动释放掉它,否则的话就会引 ...

  8. ajax VS websocket

    一. ajax VS websocket总结 http://blog.csdn.net/qiuhuanmin/article/details/50719114 二.用Websocket代替Ajax来开 ...

  9. 程序员的基本功之Java集合的实现细节

    1.Set集合与Map 仔细对比观察上面Set下和Map下的接口名,不难发现它们如此的相似,必有原因 如果只考察Map的Key会发现,它们不可以重复,没有顺序,也就是说把Map的所有的Key集中起来就 ...

  10. 老李分享:adb发送的指令都有哪些

    老李分享:adb发送的指令都有哪些   这两天在poptest上课的时候,我们邀请了业内技术牛人为我们的学员讲解手机自动化方面的知识,每天大家都很踊跃,要学习到晚上11点多才能,有的学员跟我说都累傻了 ...