[无效]网络流之Dinic算法
// 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法。原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html
UPDATE(20180805):重新看自己的博客,大部分内容还是接受了,但看到这一篇还是不能忍了。。。当年讲的还是太含糊了,怕是本身也没搞得太清楚。但本着基本保持博文原貌的原则,所以我觉得可能重开一篇会更好。链接附上:https://www.cnblogs.com/jinkun113/p/9427825.html

而层次图有什么用呢?1、在DFS增广时,当且仅当下一个点的层次是当前点的下一层才进入下一个点;2、是用来判断源点到汇点是否还有流量可以流。如果汇点已经不再层次图上了,说明没有多余的流量可以从源点流到汇点了,这个时候就可以结束搜索而输出答案了。
#include <cstdio>
#include <cstring> #define MAXN 205
#define MAXM 205
#define INF 0x3f3f3f3f int m, n, u, v, f, q[MAXN * MAXN], h[MAXN], d[MAXN], o, ans; struct Edge {
int v, next, f;
} e[MAXM << ]; int min(int a, int b) {
return a < b ? a : b;
} void add(int u, int v, int f) {
o++, e[o] = (Edge) {v, h[u], f}, h[u] = o;
} bool BFS() {
int head = , tail = ;
q[] = , d[] = ;
while (head != tail) {
int o = q[head];
for (int x = h[o]; x; x = e[x].next) {
int v = e[x].v;
if (!d[v] && e[x].f > ) d[v] = d[o] + , q[tail++] = v;
}
head++;
}
return d[n] != ;
} int DFS(int o, int mif) {
int res = ;
if (mif <= || o == n) return mif;
for (int x = h[o]; x; x = e[x].next) {
int v = e[x].v;
if (d[v] == d[o] + ) {
int of = DFS(v, min(mif, e[x].f));
e[x].f -= of, e[x + ].f += of, mif -= of, res += of;
if (!mif) break;
}
}
return res;
} int main() {
scanf("%d %d", &m, &n);
for (int i = ; i <= m; i++) scanf("%d %d %d", &u, &v, &f), add(u, v, f), add(v, u, );
while (BFS()) ans += DFS(, INF), memset(d, , sizeof(d));
printf("%d", ans);
return ;
}
[无效]网络流之Dinic算法的更多相关文章
- [知识点]网络流之Dinic算法
// 此博文为迁移而来,写于2015年2月6日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vrg4.html ...
- [无效]网络流之Edmond-Karp算法
// 此博文为迁移而来,写于2015年2月2日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102vr12.html UP ...
- 网络流 之 dinic算法
我觉得这个dinic的算法和之前的增广路法差不多 .使用BFS对残余网络进行分层,在分层时,只要进行到汇点的层次数被算出即可停止, 因为按照该DFS的规则,和汇点同层或更下一层的节点,是不可能走到汇点 ...
- 网络流之Dinic算法
初学网络流.存一下Dinic板子. 复杂度O(n^2*m) UVA - 1515 Pool construction 把每个草地与 S 相连,花费为dig,每个洞与 T 相连,花费为 然后对于每个两个 ...
- 网络流 之 dinic 算法
网络流指的是:网络流(network-flows)是一种类比水流的解决问题方法.(类似于水管群,有一个源点(水无限多),和一个汇点,最大流就代表这个点水管群(边集)每秒最大能送道汇点的水量) 这个怎么 ...
- Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分
题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...
- 网络流(dinic算法)
洛谷p3376 https://www.luogu.com.cn/problem/P3376 #include <iostream> #include <cstdio> #in ...
- 网络流最大流——dinic算法
前言 网络流问题是一个很深奥的问题,对应也有许多很优秀的算法.但是本文只会讲述dinic算法 最近写了好多网络流的题目,想想看还是写一篇来总结一下网络流和dinic算法以免以后自己忘了... 网络流问 ...
- 网络流入门—用于最大流的Dinic算法
"网络流博大精深"-sideman语 一个基本的网络流问题 最早知道网络流的内容便是最大流问题,最大流问题很好理解: 解释一定要通俗! 如右图所示,有一个管道系统,节点{1,2,3 ...
随机推荐
- torch_07_卷积神经网络案例分析
1. LeNet(1998) """ note: LeNet: 输入体:32*32*1 卷积核:5*5 步长:1 填充:无 池化:2*2 代码旁边的注释:卷积或者池化后的 ...
- PyQt5笔记之布局管理
代码:界面与逻辑分离 这是使用Designer做出的GUI,然后通过转换得到的Py代码.(界面文件) # -*- coding: utf-8 -*- # Form implementation gen ...
- snap应用多版本卸载
Ubuntu18.04新增了几个内置软件使用Snap格式.同样的沙箱式处理方式,除了Canonical主推的Snap,还有Fedora的Flatpak和AppImage.一般正常使用没问题,就是第一次 ...
- Java8 新特性 Stream 短路终端操作
短路终端操作 Java8 新特性 Stream 练习实例 传入一个谓词,返回传为boolean,如果符合条件,则直接结束流. 匹配所有 allMatch 任意匹配 anymMatch 不匹配 none ...
- service的yaml说明
apiVersion: v1 kind: Service metadata: name: nginx-service labels: app: nginx spec: ports: - port: 8 ...
- 【ELK】7. elasticsearch linux上操作es命令详解
========== 1.检查ES节点是否正常启动 curl http://192.168.6.16:9200 正常状态: 非正常状态: 1>确保服务是不是正常启动了,端口用的是哪个 2> ...
- 使用RunTime.getRunTime().addShutdownHook优雅关闭线程池
有时候我们用到的程序不一定总是在JVM里面驻守,可能调用完就不用了,释放资源. RunTime.getRunTime().addShutdownHook的作用就是在JVM销毁前执行的一个线程.当然这个 ...
- js计算两经纬度之间的距离
js如下: // 方法定义 lat,lng function GetDistance( lat1, lng1, lat2, lng2){ var radLat1 = lat1*Math.PI / ...
- C#7语法快速参考-第一章 Hello World
选择IDE 要开始使用C#编程,您需要一个支持微软.NET框架的集成开发环境(IDE).最受欢迎的选择是微软自己的Visual Studio.初学可以使用Visual Studio Community ...
- python 动态创建变量 获取变量名
参考链接:https://www.cnblogs.com/technologylife/p/9211324.html 参考链接(未)(使用inspect 获取变量名):https://blog.csd ...