网络流是啥不用我说了吧

增广路定理不用我说了吧

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. 理解依赖注入(DI - Dependency Injection)

    系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of Contro ...

  2. gdb 常用选项

    gdb 常用选项 help:查看命令帮助,具体命令查询在gdb中输入help + 命令,简写h run:重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件),简写r st ...

  3. Spring入门之二-------SpringIoC之实例化Bean以及注入Bean

    一.实例化Bean 1. 通过默认构造方法实创建Bean public class Bean1 { public Bean1() { System.out.println(this.getClass( ...

  4. 【shell】常用shell脚本

    1.检查主机存活状态 #!/bin/bash IP_LIST="192.168.18.1 192.168.1.1 192.168.18.2" for IP in $IP_LIST; ...

  5. sql server 日期时间数据类型

    1.日期和时间数据类型 (1)在sqlserver 2008之前,SQL Server 支持datetime 和 smalldatetime 两种日期时间数据类型.这两种数据类型日期和时间是不可分割的 ...

  6. date linux系统校正时间

    date命令使用 -d<字符串>  显示字符串所指的日期与时间.字符串前后必须加上双引号.   date -d '13 second ago' ‘+%T’  13秒前   date +%T ...

  7. PHP四种输出语句

    //echo 深入理解echo ,echo是一个函数 //echo 功能:向浏览器输出一个或多个字符串; //echo 返回值:void 无返回值; echo "今天是个好天气"; ...

  8. Angular 后台报错记录

    异常信息:ERROR TypeError: Cannot read property 'xxxx' of undefined 异常原因:"xxx"属性未定义,引发异常的原因可能是H ...

  9. java课程之团队开发冲刺阶段2.5

    总结昨天进度: 1.昨天对课前提醒的基本框架已经搭好,剩下的就是对如何提醒进行设置 遇到的困难: 1.在一些细节地方,代码有点犯浑,将Preferences的文件写错了,导致在用switch开关得到时 ...

  10. C# 添加Log文件、记录Log

    其实在平时的开发过程中都是不怎么写log的,觉得在debug中能看得一清二楚.同事小姐姐前辈,一直就我不写log进行批判,但是我从来不改,哈哈.也算是遇到报应了,在最近一个工程里,本地调试一切正常,到 ...