Description

在残余网络上bfs标号建立层次图,然后在层次图上多次dfs不断寻找增广路径增广,增广路径上的结点要按层次图上标号递增的顺序。如果找不到增广路径就重新标记层次图,直到元源点与汇点不再相连。

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int N = 1e3 + 10;
const int M = 2e3 + 10;struct Edge
{int to, c, next;Edge() {}Edge(int to, int c, int next) : to(to), c(c), next(next) {}
} edge[M];
int adj[N], tot;void init()
{memset(adj, -1, sizeof(adj));tot = 0;
}void add(int u, int v, int c)
{edge[tot] = Edge(v, c, adj[u]);adj[u] = tot++;edge[tot] = Edge(u, 0, adj[v]);adj[v] = tot++;
}int level[N];
queue<int> q;
bool bfs(int s, int t)
{while (!q.empty()) q.pop();memset(level, -1, sizeof(level));level[s] = 0; q.push(s);while (!q.empty()){int u = q.front(); q.pop();for (int i = adj[u]; i != -1; i = edge[i].next){Edge &e = edge[i];if (e.c && level[e.to] == -1){level[e.to] = level[u] + 1;if (e.to == t) return true;q.push(e.to);}}}return false;
}int cur[N];
int dfs(int u, int t, int flow)
{if (u == t) return flow;for (int &i = cur[u]; i != -1; i = edge[i].next){Edge &e = edge[i];if (e.c && level[e.to] > level[u]){int f = dfs(e.to, t, min(flow, e.c));if (f){e.c -= f;edge[i ^ 1].c += f;return f;}}}return 0;
}int dinic(int s, int t)
{int flow = 0;while (bfs(s, t)){memcpy(cur, adj, sizeof(adj));int f; int c = 0;while (f = dfs(s, t, INF)) flow += f;}return flow;
}int main()
{int n, m;scanf("%d%d", &n, &m);init();while (m--){int u, v, c;scanf("%d%d%d", &u, &v, &c);add(u, v, c);}int s, t;scanf("%d%d", &s, &t);int ans = dinic(s, t);printf("%d\n", ans);return 0;
}

Input

第一行给出结点数\(n\)和边数\(m\),接下来的\(m\)行,每行给出两个三个整数\(u\),\(v\)和\(c\),表示从\(u\)到\(v\)有一条容量为\(c\)的边。最后一行给出源点\(s\)和汇点\(t\)。

Output

输出一个整数,表示最大流。

Sample Input

6 9
0 1 10
0 2 10
1 2 2
1 3 4
1 4 8
2 4 9
3 5 10
4 3 6
4 5 10
0 5

Sample Output

19

转载于:https://www.cnblogs.com/dadamrx/p/7358632.html

最大流Dinic算法相关推荐

  1. 图论 —— 网络流 —— 最大流 —— Dinic 算法

    [概述] Dinic 算法在 EK 算法的基础上进行了优化,其时间复杂度为 O(n*n*m). Dinic 在找增广路的时也是找最短增广路, 但与 EK 算法不同的是 Dinic 算法并不是每次 bf ...

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

    Dinic算法跟EK算法的优化地方就在于,EK是每次bfs记录前驱结点,然后从汇点找到一条回到源点的路. 而dinic是bfs记录深度,不断从源点dfs到汇点并且更新路径流量,直到dfs不到汇点. 邻 ...

  3. hdu4280 Island Transport 网络流最大流 Dinic算法高效模板

    Island Transport In the vast waters far far away, there are many islands. People are living on the i ...

  4. hdu4292Food(最大流Dinic算法)

    /* 题意:每一个人都有喜欢的吃的和喝的,每一个人只选择一个数量的吃的和一个数量的喝的,问能满足最多的人数!? 思路:建图很是重要!f-food, p-people, d-drink 建图: 0(源点 ...

  5. dinic (最大流) 算法 讲解

    网络流入门-用于最大流的Dinic算法 转自:http://comzyh.tk/blog/archives/568/ "网络流博大精深"-sideman语 一个基本的网络流问题 感 ...

  6. Dinic算法----最大流常用算法之一

    --没有什么是一个BFS或一个DFS解决不了的:如果有,那就两个一起. 最大流的$EK$算法虽然简单,但时间复杂度是$O(nm^2)$,在竞赛中不太常用. 竞赛中常用的$Dinic$算法和$SAP$, ...

  7. 最大流EK和Dinic算法

    最大流EK和Dinic算法 EK算法 最朴素的求最大流的算法. 做法:不停的寻找增广路,直到找不到为止 代码如下: @Frosero #include <cstdio> #include ...

  8. 网络流初步:最大流(Dinic算法)

    网络流初步:最大流 标签: 网络流 最大流 Dinic 最大流 例题 POJ****(USACO4.2.1) 在农夫约翰的农场上,每逢下雨,Bessie最喜欢的三叶草地就积聚了一潭水.这意味着草地被水 ...

  9. 网络流-最大流(Ford-Fulkerson算法Dinic算法)

    文章目录 最大流 FF算法: 增广路: 反边: 代码: Dinic算法: Dinic + 当前弧优化 最大流 就如同水流,存在一张图,既有起点又有终点,从起点流向终点的最大流量就是最大流. 在上面的图 ...

  10. 最大流算法模板:EK和dinic算法

    最大流算法模板:EK和dinic算法 一.EK算法模板 #include<iostream> #include<queue> using namespace std; cons ...

最新文章

  1. HDU-2084 数塔 经典dp,水
  2. python条件语句-Python 条件语句
  3. 11个鲜为人知的实用Linux命令 - Part 2
  4. 智能家居项目开发准备工作
  5. SharePoint安全 - SharePoint网站常用页面URL索引
  6. CentOS赋予一个普通用户root权限
  7. python write函数换行_Python基础知识(三)
  8. java工程师_北京java工程师课程
  9. Android范围自定义,android – 如何在dagger 2.10中创建自定义范围模块
  10. 衡算计算机性能指标,广东海洋大学2018年硕士生招生初试科目的考试内容范围说明计算机.PDF...
  11. vs201x下正则表达式过滤中文
  12. 八爪鱼取消Ajax加载数据,谁知道八爪鱼采集器设置了循环翻页采集怎么才采集十几个数据就停下不动了...
  13. 怎么利用计算机求一元三次方程,一元三次方程怎么快速把解求出来?
  14. JAVA日期转换函数(包括:日期、周数的计算)
  15. POI生成动态模板PPT报告
  16. pc构件生产线及设备_PC构件生产线全套设备清单
  17. c#取消word修订痕迹_C# 插入、修改、删除Word批注
  18. 学计算机拼音摇号,电脑摇号:作弊100%!
  19. 苍穹官网页html多功能源码纯HMTL
  20. 3D游戏编程与设计作业六

热门文章

  1. 间通过蓝牙模块建立通讯_拥抱蓝牙mesh,幻腾用“互联”深化智能
  2. Nginx源码分析 - 核心模块初始化顺序,根据ctx创建上下文
  3. element-ui中rules使用正则表达式进行校验
  4. python editor_Python+Weditor
  5. 【sklearn第二十六讲】模型评价
  6. 对称 symmetric
  7. 为CentOS7/RHEL7安装EPEL 仓库(repo)
  8. Oracle数据库-建库、建表空间,建用户
  9. [转] 如何提取word图片
  10. Liunx服务管理(Centos)