详解:http://blog.csdn.net/wall_f/article/details/8207595

算法时间复杂度:O(E * V * V)

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <queue>
  4. #include <vector>
  5. using namespace std;
  6. #define N 105
  7. #define M 1010
  8. #define INF 0x3f3f3f3f
  9.  
  10. struct Edge {
  11. int u, v, cap;
  12. Edge () {}
  13. Edge (int u, int v, int cap) : u (u), v (v), cap (cap) {}
  14. }edge[N*N];
  15. vector<int> G[N];
  16. int S, T, cur[N], dis[N], tot;
  17.  
  18. void Addedge(int u, int v, int cap) {
  19. G[u].push_back(tot);
  20. edge[tot++] = Edge(u, v, cap);
  21. G[v].push_back(tot);
  22. edge[tot++] = Edge(v, u, );
  23. }
  24.  
  25. int BFS() { // 找层次图
  26. queue<int> que;
  27. while(!que.empty()) que.pop();
  28. memset(dis, INF, sizeof(dis));
  29. que.push(S);
  30. dis[S] = ;
  31. while(!que.empty()) {
  32. int u = que.front(); que.pop();
  33. for(int i = ; i < G[u].size(); i++) {
  34. Edge &e = edge[G[u][i]];
  35. if(dis[e.v] == INF && e.cap > ) {
  36. dis[e.v] = dis[u] + ;
  37. que.push(e.v);
  38. }
  39. }
  40. }
  41. return dis[T] != INF;
  42. }
  43.  
  44. int DFS(int u, int maxflow) { // 找增广路
  45. if(u == T) return maxflow; //
  46. for(int i = cur[u]; i < G[u].size(); i++) {
  47. cur[u] = i; // 当前弧优化
  48. Edge &e = edge[G[u][i]];
  49. if(dis[e.v] == dis[u] + && e.cap > ) {
  50. int flow = DFS(e.v, min(e.cap, maxflow)); // 找到增广路上最小的流量增量
  51. if(flow) {
  52. e.cap -= flow;
  53. edge[G[u][i]^].cap += flow;
  54. return flow;
  55. }
  56. }
  57. }
  58. return ; // 找不到增广路
  59. }
  60.  
  61. int Dinic() {
  62. int ans = ;
  63. while(BFS()) {
  64. int flow;
  65. memset(cur, , sizeof(cur));
  66. while(flow = DFS(S, INF)) ans += flow;
  67. }
  68. return ans;
  69. }

Dinic算法模板的更多相关文章

  1. POJ 1273 Drainage Ditches(网络流dinic算法模板)

    POJ 1273给出M条边,N个点,求源点1到汇点N的最大流量. 本文主要就是附上dinic的模板,供以后参考. #include <iostream> #include <stdi ...

  2. POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]

    妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...

  3. HDU1532最大流 Edmonds-Karp,Dinic算法 模板

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...

  4. hdu 2435 dinic算法模板+最小割性质

    #include<stdio.h> #include<queue> #include<string.h> using namespace std; #define ...

  5. POJ 3469.Dual Core CPU 最大流dinic算法模板

    Dual Core CPU Time Limit: 15000MS   Memory Limit: 131072K Total Submissions: 24830   Accepted: 10756 ...

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

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

  7. hdu-3549 Flow Problem---最大流模板题(dinic算法模板)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3549 题目大意: 给有向图,求1-n的最大流 解题思路: 直接套模板,注意有重边 传送门:网络流入门 ...

  8. 求最大流dinic算法模板

    //最短增广路,Dinic算法 struct Edge { int from,to,cap,flow; };//弧度 void AddEdge(int from,int to,int cap) //增 ...

  9. POJ 1459 Power Network(网络最大流,dinic算法模板题)

    题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数.      接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电 ...

随机推荐

  1. [zt]系统中常用MIPS指令

    指令 功能 应用实例 LB 从存储器中读取一个字节的数据到寄存器中 LB R1, 0(R2) LH 从存储器中读取半个字的数据到寄存器中 LH R1, 0(R2) LW 从存储器中读取一个字的数据到寄 ...

  2. 跨集群 distcp命令

    两个集群之间做数据同步,而且两个集群之间的版本不一致,这个时候使用的是hftp协议或者webhdfs协议! 如果试图在两个运行着不同HDFS版本的集群上使用distcp命令来复制数据并使用hdfs协议 ...

  3. Centos 下安装 文泉驿 字体 Odoo

    刚装完centos下的odoo的字体 文泉驿 ,一万头草泥马呼啸而过.....劝君如非必要,千万别再centos下折腾odoo..... 正题,文泉驿官网 只提供 deb包和源码包的字体安装 ,想在c ...

  4. linux笔记十----虚拟机网络配置

    首先,参考了博客http://blog.csdn.net/qianggezhishen/article/details/45841723,可以学会怎样确定界面类型

  5. CSS3初学篇章_1

    CSS 层叠样式表 不同的浏览器需要不同的前缀,虽然目前最新版本的浏览器的不需要,但为了向下兼容,前缀还是少不了. 前缀 浏览器  -webkit  chrome和safari  -moz  fire ...

  6. 【HDU3721】枚举+最长路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3721 题意:给你一颗n个节点n-1条边的树,每条边都有一个权值,现在让你任意移动一条边然后把这条边连接 ...

  7. //sql过滤关键字

    //sql过滤关键字 public static bool CheckKeyWord(string sWord) { //过滤关键字 string StrKeyWord = @"select ...

  8. BZOJ1857[SCOI2010]传送带

    题目大意:平面上两条线段,一个人从一条线段的一个点到另一条线段的一个点,最小时间是多少 路径肯定是在一条线段上走一段,然后走平面,最后再走另一条线段,那么需要确定的就是在两条线段上走的距离,其他暴力算 ...

  9. Myeclipse8.5 subscription expired自己动手获取Myeclipse的注册码

    步骤: 1.在myeclipse中新建一个java project 2.在src目录下建立一个名为MyEclipseGen的类 3.将下面的代码复制到该类中,并运行. import java.io.* ...

  10. Final-阶段站立会议4

    组名:天天向上 组长:王森 组员:张政.张金生.林莉.胡丽娜 代码地址:HTTPS:https://git.coding.net/jx8zjs/llk.git SSH:git@git.coding.n ...