复杂度上界为 \(\Theta(n^2m)\),实际效率远高于此。

#include <bits/stdc++.h>
using namespace std; const int N=5e5+5;
const int M=1e6+5;
const int MN=1e3+5;
typedef long long ll; inline int read(){int x(0), f(0); char ch=getchar(); while(ch<'0'||ch>'9'){f|=ch=='-';ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48); ch=getchar();} return f?-x:x;}
template <typename T> void read(T &x){x=0; T f(0); char ch=getchar(); while(ch<'0'||ch>'9'){f|=ch=='-';ch=getchar();} while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48); ch=getchar();} x=f?-x:x;}
template <typename T,typename ...Arg>void read(T& x,Arg& ...arg){read(x);read(arg...);}
template <typename T> inline void write(T x){static char buf[64]; static int tot(0); if(x<0) putchar('-'),x=-x; do buf[++tot]=(x%10)+48,x/=10; while(x); do putchar(buf[tot--]); while(tot);}
template <typename T> void write(T x,char c){static char buf[64]; static int tot(0); if(x<0) putchar('-'),x=-x; do buf[++tot]=(x%10)+48,x/=10; while(x); do putchar(buf[tot--]); while(tot); putchar(c);} void Solve(); struct Graph{
int to, next;
ll w;
}G[M << 1];
int _head[N], cur[N], cnt(1);
void addEdge(int u,int v,int w = 1){G[++cnt] = (Graph){v, _head[u], w}; _head[u] = cnt;} int n,m,s,t; int main(){
// Multicase()
Solve();
} int dep[N],que[N]; bool bfs(){
memcpy(cur + 1, _head + 1, (n + 5) * sizeof(cur[0]));
memset(dep, 0, (n + 5) * sizeof(dep[0]));
dep[s] = 1;
int head = 1, tail = 0; que[++tail] = s;
while(tail >= head){
int u = que[head++];
for(int i = _head[u]; i; i = G[i].next){
int t = G[i].to;
if(G[i].w && !dep[t]){
dep[t] = dep[u] + 1;
que[++tail] = t;
}
}
}
return dep[t];
} ll dfs(int now, ll flow){
ll tot = 0, f = 0;
if(now == t || flow == 0) return flow;
for(int i = cur[now]; i; i = G[i].next){
cur[now] = i;
int t = G[i].to;
if(G[i].w && dep[t] == dep[now] + 1){
if(f = dfs(t, min(flow, G[i].w))){
G[i].w -= f;
G[i ^ 1].w += f;
tot += f;
flow -= f;
if(flow == 0) break;
}
}
}
return tot;
} ll dinic(){
ll maxflow = 0;
while(bfs()) maxflow += dfs(s, 1<<30);
return maxflow;
} void Solve(){
read(n, m);
s = 1, t = n;
for(int i = 1; i <= m; i++){
int u, v, w;
read(u, v, w);
addEdge(u, v, w);
addEdge(v, u, 0);
}
printf("%lld\n", dinic());
}

【模板】网络最大流 Dinic(多路增广+当前弧优化)的更多相关文章

  1. P3376 [模板] 网络最大流

    https://www.luogu.org/blog/ONE-PIECE/wang-lao-liu-jiang-xie-zhi-dinic EK 292ms #include <bits/std ...

  2. P3376 网络最大流模板(Dinic + dfs多路增广优化 + 炸点优化 + 当前弧优化)

    ### P3376 题目链接 ### 这里讲一下三种优化的实现以及正确性. 1.dfs多路增广优化 一般的Dinic算法中是这样的,bfs() 用于标记多条增广路,以至于能一次 bfs() 出多次 d ...

  3. bzoj 5120 无限之环 & 洛谷 P4003 —— 费用流(多路增广SPFA)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5120 https://www.luogu.org/problemnew/show/P4003 ...

  4. LOJ 2979 「THUSCH 2017」换桌——多路增广费用流

    题目:https://loj.ac/problem/2979 原来的思路: 优化连边.一看就是同一个桌子相邻座位之间连边.相邻桌子对应座位之间连边. 每个座位向它所属的桌子连边.然后每个人建一个点,向 ...

  5. P3376 【模板】网络最大流 dinic详解

    dinic的核心在于分层和多路增广. 分层的意思是,对于图用bfs搜出每一层,避免出现dfs深度过深的情况. 多路增广,利用的是dfs的回溯性质,这样就可以在一个点增广出它的所有流量. #includ ...

  6. 网络最大流 Dinic算法

    前言 看到网上好多都用的链式前向星,就我在用 \(vector\) 邻接表-- 定义 先来介绍一些相关的定义.(个人理解) 网络 一个网络是一张带权的有向图 \(G=(V,E)\) ,其中每任意一条边 ...

  7. P3376 【模板】网络最大流dinic算法

    P3376 [模板]网络最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点 ...

  8. 网络流初步:<最大流>——核心(增广路算法)(模板)

    增广路的核心就是引入了反向边,使在进行道路探索选择的时候增加了类似于退路的东西[有一点dp的味道??] 具体操作就是:1.首先使用结构体以及数组链表next[ MAXN ]进行边信息的存储 2.[核心 ...

  9. luogu3376 【模板】网络最大流 dinic

    当前弧优化 #include <iostream> #include <cstring> #include <cstdio> #include <queue& ...

随机推荐

  1. Spring boot pom 配置文件

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  2. 小菜鸡的学习笔记---<正则表达式(1)>

    正则表达式学习笔记(1) (纯新手学习笔记,大佬绕路 QAQ) 一.简介 正则表达式就是一种文本模式用来匹配一系列满足特定条件的字符串,可以对比一下数学里面的表达式,比如我们要用一个表达式表示一串数字 ...

  3. JAVA代码审计之xss

    java_sec_code xss 补充和回忆一下一些开发基础 @RestController @RequestMapping(value = "/xss") public cla ...

  4. WPF之lognet4的基本使用

    log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文介绍lognet4的基本使用. 第一步:新 ...

  5. RocketMQ 在物流行业的应用与运维

    本文作者:丁威 - 中通快递资深架构师,<RocketMQ技术内幕>作者,Apache RocketMQ社区首席布道师,公众号「中间件兴趣圈」维护者. 01 物流行业的业务特点 物流行业有 ...

  6. git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.

    当我们拿到一天别人用的电脑,里面是上一位前辈的git ssh key,这时候我们要自己改,改完之后上传代码到远程repository时, 可能会报git@github.com: Permission ...

  7. day34 JSTL标签

    JSTL标签 <!-- 写在jsp文件的最前 --> <!-- JSTL标签库是一个JSP标签的集合,封装了许多jsp应用程序通用的核心功能 prefix="c" ...

  8. 【Java EE】Day11 BootStrap、响应式布局、栅格系统、CSS样式、案例

    一.BootStrap介绍 https://v3.bootcss.com/css/#overview 1.概念 基于三剑客开发的前端开发框架 定义了许多css样式和js插件,从而得到丰富的页面效果 依 ...

  9. 有来实验室|第一篇:Seata1.5.2版本部署和开源全栈商城订单支付业务实战

    在线体验:Seata实验室 一. 前言 相信 youlai-mall 的实验室大家有曾在项目中见到过,但应该都还处于陌生的阶段,毕竟在此之前实验室多是以概念般的形式存在,所以我想借着此次的机会,对其进 ...

  10. 网络编程 - OSI七层协议详解

    目录 网络编程基础 软件开发架构 网络编程简介 OSI七层协议简介 OSI协议之物理连接层 OSI协议之数据链路层 网络相关专业名词 OSI之网络层 OSI协议之传输层 传输层之TCP协议/UDP协议 ...