[无效]网络流之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 ...
随机推荐
- W5500电路图
W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图:
- Beta冲刺(6/7)——2019.5.28
作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...
- Go - chan 通道
概述 原来分享的基础语法的时候,还未分享过 chan 通道,这次把它补上. chan 可以理解为队列,遵循先进先出的规则. 在说 chan 之前,咱们先说一下 go 关键字. 在 go 关键字后面加一 ...
- CopyOnWriteArrayList 源码分析 基于jdk1.8
CopyOnWriteArrayList 源码分析: 1:成员属性: final transient ReentrantLock lock = new ReentrantLock(); //内部是 ...
- Problem 1059 老师的苦恼
Bob写文章时喜欢将英文字母的大小写混用,例如Computer Science经常被他写成coMpUtEr scIeNce,这让他的英文老师十分苦恼,现在请你帮Bob的英文老师写一个程序能够将Bob的 ...
- C# Newtonsoft.Json.JsonReaderException:“Could not convert string to decimal:
使用Newtonsoft.Json,报以上错误,问题的原因是有"",把“”替换成null: 以前的json: [{"WengvNj":"df5c38c ...
- tengine 基于权重负载均衡的简单配置
环境如下: 资源服务器_1:192.168.10.10 centos 7 tengine 2.3.0 资源服务器_2:192.168.10.129 centos 7 tengine 2.3. ...
- spring容器的功能扩展
容器的扩展功能主要实现为: org.springframework.context.support.AbstractApplicationContext.refresh() public void r ...
- 初学Mybatis
首先配置mybatis配置文件 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" &qu ...
- 实验吧——who are you?(insert into注入 二分法 时间盲注)
题目地址:http://ctf5.shiyanbar.com/web/wonderkun/index.php 根据提示 “我要把攻击我的人都记录db中去!” 猜测这是insert into注入,会 ...