网络流是啥不用我说了吧

增广路定理不用我说了吧

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学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. JavaScript获取当前日期前后7天的日期

    function fun_date(aa){ var date1 = new Date(), time1=date1.getFullYear()+"-"+(date1.getMon ...

  2. 第十三篇Django Logging配置样例

    第十三篇Django Logging配置样例 阅读目录(Content) Django 日志配置模板 官方链接 Django Logging Django 日志配置模板 LOGGING = { 've ...

  3. c++程序—浮点数

    #include<iostream> using namespace std; int main() { //2.单精度float //3.双精度double //默认情况下会输出6位有效 ...

  4. PL/SQL表结构/数据的导出

    1.表结构导出 方法一:在sql页面点击表名,进入表编辑页面,点击右下角“查看SQL”按钮,即可看到表结构 方法二:工具--导出用户对象 去掉所有者勾选项,即***.表名:用户名字在其他用户导入数据库 ...

  5. Egret Engine 2D - 矢量绘图

      绘制矩形 drawRect 绘制矩形边 lineStyle( 10, 0x00ff00 清空绘图 clear 绘制园形 drawCircle 绘制直线 moveTo lineTo 绘制曲线 cur ...

  6. MySQL8.0安装caching_sha2_password问题

    MySQL安装之后无法用工具连接上本地数据库 详情原因可见: https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-pl ...

  7. Aduino Nano 技术性能指标

    纵览 在Adnuino Nano网站上节选了该控制器的价格等,在中国买非常便宜,我用10元左右的人民币就买到了这个产品,在Arduino网站上的价格是22美金,还不包括税.这种差别是如何造成的?是国外 ...

  8. tableau创建定量值地图

    一.官方案例:定量值地图的创建 数据形式:  过程: 分别双击经纬度(默认的纬度会自动添加到行功能区,经度到列功能区) 将Id放入标记卡详细信息 将Magnitude^10(震级^10)放入大小,(该 ...

  9. COGS1487 麻球繁衍

    不会做%%http://blog.csdn.net/doom_bringer/article/details/50428503 #include<bits/stdc++.h> #defin ...

  10. Essay写作用对标点符号很重要!

    很多留学生在essay写作中对于标点符号的正确使用可能不是太清楚,今天Meeloun小编给大家整理了一些关于标点符号的正确打开方式,希望可以帮到同学们! Colloquialism俗语: 如果要在写作 ...