Dinic学习笔记
网络流是啥不用我说了吧
增广路定理不用我说了吧
Dinic就是分层然后只在层间转移,然后就特别快,$$O(N^2M)$$
伪代码:
function dinic
int flow = 0 ;
while bfs() do
memsets()
while int val = dfs() do
flow += val;
return flow
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std ;
#define MAXN 1000005
int head[MAXN],ver[MAXN*4],edge[MAXN*4],Next[MAXN*4],tot=-1,s,t ;
int dep[MAXN],cur[MAXN] ;
int n,m ;
void init(){
tot = -1 , memset(head,-1,sizeof(head)),memset(Next,-1,sizeof(Next)) ;
}
void _add(int u,int v,int w){
ver[++tot]=v,
edge[tot]=w,
Next[tot]=head[u],
head[u]=tot ;
}
void add(int u,int v,int w){
_add(u,v,w),
_add(v,u,0) ;
}
int bfs(){
memset(dep,0,sizeof(dep)) ;
queue<int> Q ;while(!Q.empty()) Q.pop() ;
Q.push(s) ; dep[s] = 1 ;
while(!Q.empty()){
int v=Q.front() ; Q.pop() ;
for(int i=head[v];i!=-1;i=Next[i]){
//printf("Bfs: at dot %d\n",ver[i]) ;
//for(int j=1;j<=MAXN*10;++j) ;
if(dep[ver[i]] == 0 && edge[i]>0)
dep[ver[i]] = dep[v]+1 , Q.push(ver[i]) ;
}
}
if(!dep[t]) return 0 ;
return 1 ;
}
int dfs(int u,int f){
if(u == t) return f ;
for(int& i=cur[u];i!=-1;i=Next[i]){
if(dep[ver[i]] == dep[u]+1 && edge[i]!=0){
int di = dfs(ver[i],min(edge[i],f)) ;
if(di > 0){
edge[i] -= di , edge[i^1] += di ;
return di ;
}
}
}
return 0 ;
}
int Dinic(){
int flow = 0 , d = 0 ;
while(bfs()){
for(int i=1;i<=n;++i) cur[i] = head[i] ;
while(d = dfs(s,0x3f3f3f3f)) flow += d ;
}
return flow ;
}
int main(){
init() ;
scanf("%d%d%d%d",&n,&m,&s,&t) ;
for(int i=1;i<=m;++i){
int x,y,z ; scanf("%d%d%d",&x,&y,&z) ; add(x,y,z) ;
}
printf("%d\n",Dinic()) ;
}
Dinic学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- ES6模块化深入 debug
引子: 2020.2.24.最近刚写完一个vue项目.项目用到ES6的模块化 想到之前写node项目用到过commonjs模块化 就想着把所有用到过的模块化技术 总结学习一下 在看阮一峰老师的 es6 ...
- 编程入门-Eclipse项目导出和导入
编程入门-Eclipse项目导出和导入 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.导出项目 1>.如下图所示,在项目目录上右击鼠标,依次点击"Export& ...
- 14 ~ express ~ 显示用户数据
一,router/admin.js var express = require('express') var router = express.Router() var User = require( ...
- # vim ~/.vimrc vim配色
Ubuntu # vim ~/.vimrc # /hom/zzx 下 set nomodeline "(这个一定要写,目前有这个安全漏洞) set ...
- Python 中异常嵌套
在Python中,异常也可以嵌套,当内层代码出现异常时,指定异常类型与实际类型不符时,则向外传,如果与外面的指定类型符合,则异常被处理,直至最外层,运用默认处理方法进行处理,即停止程序,并抛出异常信息 ...
- PAT Advanced 1155 Heap Paths (30) [DFS, 深搜回溯,堆]
题目 In computer science, a heap is a specialized tree-based data structure that satisfies the heap pr ...
- Windows10 与 WSL(Ubuntu)的文件互访
从WSL访问win10的文件 > cd /mnt 从win10访问WSL的文件 打开Ubuntu > explorer.exe . (后面的点不要漏掉)
- Java基础之IO流整理
Java基础之IO流 Java IO流使用装饰器设计模式,因此如果不能理清其中的关系的话很容易把各种流搞混,此文将简单的几个流进行梳理,后序遇见新的流会继续更新(本文下方还附有xmind文件链接) 抽 ...
- JS/JQUERY函数库
1. 判断字符串是否为空 function isEmptyString(str) { return str == undefined || str == "" || str == ...
- openstack trove weekly meeting时间即将更改
为了平衡英国.巴黎.德国.美国和中国开发者的作息习惯,openstack trove项目组在5月18日的weekly meeting上开始讨论新的开会时间. 当前的开会时间是,周三 UTC 18:00 ...