网络流 最小割 Dinic算法

news/2025/10/2 22:26:46/文章来源:https://www.cnblogs.com/xdhking/p/19124099

image

标准模板

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=210,M=5e3+10;
int n,m,s,t,d[N],cur[N],vis[N];
int h[N],e[M<<1],ne[M<<1],id=1;//从2,3开始配对
LL c[M<<1];
void add(int u,int v,LL w){++id;e[id]=v;ne[id]=h[u];c[id]=w;h[u]=id;
}LL dfs(int u,LL mf){//多路增广if(u==t)return mf;LL sum=0;for(int i=cur[u];i;i=ne[i]){cur[u]=i;//当前弧优化int v=e[i];if(d[v]==d[u]+1&&c[i]){LL f=dfs(v,min(mf,c[i]));sum+=f;//累加u的流出流量c[i]-=f;c[i^1]+=f;//更新残留网mf-=f;//减少u的剩余流量if(mf==0)//余量优化break;}}if(sum==0)//残枝优化d[u]=0;return sum;
}bool bfs(){//对点分层,找增广路memset(d,0,sizeof(d));queue<int> q;q.push(s);d[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){int v=e[i];if(d[v]==0&&c[i]){d[v]=d[u]+1;q.push(v);if(v==t)return true;}}}return false;
}LL dinic(){//累加可行流LL flow=0;while(bfs()){memcpy(cur,h,sizeof(h));flow+=dfs(s,1e9);}return flow;
}void mincut(int u){vis[u]=1;for(int i=h[u];i;i=ne[i]){int v=e[i];if(!vis[v]&&c[i])mincut(v);}
}void reset_edges(){//每条边是成对存储,正边id为偶数,反边id为奇数for(int i=2;i<=id;i++){if(i&1){c[i]=0;}else{if(c[i])c[i]=1e9;elsec[i]=1;}}
}
int main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>n>>m>>s>>t;for(int i=1;i<=m;i++){LL u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,0);}//最小割cout<<dinic()<<endl;//最小割划分mincut(s);//访问过的点为S集合for(int i=1;i<=n;i++){if(vis[i])cout<<i<<' ';}cout<<endl;//没访问过的点为T集合for(int i=1;i<=n;i++){if(!vis[i])cout<<i<<' ';}cout<<endl;//求最小割的最少边数//重建边时应当把第一遍dinic中剩余容量为0的正向边的边权设为1,//其他正向边设为无穷大,反向边都设为零,//因为只有流满的边才是最小割中的边。reset_edges();cout<<dinic()<<endl;return 0;
}

模板题:洛谷p1344

code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=210,M=5e3+10;
int n,m,s,t,d[N],cur[N],vis[N];
int h[N],e[M<<1],ne[M<<1],id=1;//从2,3开始配对
LL c[M<<1];
void add(int u,int v,LL w){++id;e[id]=v;ne[id]=h[u];c[id]=w;h[u]=id;
}LL dfs(int u,LL mf){//多路增广if(u==t)return mf;LL sum=0;for(int i=cur[u];i;i=ne[i]){cur[u]=i;//当前弧优化int v=e[i];if(d[v]==d[u]+1&&c[i]){LL f=dfs(v,min(mf,c[i]));sum+=f;//累加u的流出流量c[i]-=f;c[i^1]+=f;//更新残留网mf-=f;//减少u的剩余流量if(mf==0)//余量优化break;}}if(sum==0)//残枝优化d[u]=0;return sum;
}bool bfs(){//对点分层,找增广路memset(d,0,sizeof(d));queue<int> q;q.push(s);d[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){int v=e[i];if(d[v]==0&&c[i]){d[v]=d[u]+1;q.push(v);if(v==t)return true;}}}return false;
}LL dinic(){//累加可行流LL flow=0;while(bfs()){memcpy(cur,h,sizeof(h));flow+=dfs(s,1e9);}return flow;
}void mincut(int u){vis[u]=1;for(int i=h[u];i;i=ne[i]){int v=e[i];if(!vis[v]&&c[i])mincut(v);}
}void reset_edges(){//每条边是成对存储,正边id为偶数,反边id为奇数for(int i=2;i<=id;i++){if(i&1){c[i]=0;}else{if(c[i])c[i]=1e9;elsec[i]=1;}}
}
int main(){cin.tie(nullptr)->sync_with_stdio(false);// cin>>n>>m>>s>>t;cin>>n>>m;s=1;t=n;for(int i=1;i<=m;i++){LL u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,0);}//最小割// cout<<dinic()<<endl;cout<<dinic()<<' ';//最小割划分// mincut(s);//访问过的点为S集合// for(int i=1;i<=n;i++){//     if(vis[i])//         cout<<i<<' ';// }// cout<<endl;//没访问过的点为T集合// for(int i=1;i<=n;i++){//     if(!vis[i])//         cout<<i<<' ';// }// cout<<endl;//求最小割的最少边数//重建边时应当把第一遍dinic中剩余容量为0的正向边的边权设为1,//其他正向边设为无穷大,反向边都设为零,//因为只有流满的边才是最小割中的边。reset_edges();cout<<dinic()<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15.VLANIF(2025年9月30日) - 教程

15.VLANIF(2025年9月30日) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

国庆集训DAY2

国庆集训DAY2T1 cycle思路 直接暴力\(dfs\) 解法 \(dfs\)限制\(a_i \neq a_{i-1}\) 最后判断\(a_n \neq a_{1}\) 归纳总结解题策略 \(dfs\) 结果 100pts 时间分配 20minT2 factor思路 直接暴力\(dfs\) 解法 直接暴力\(…

树莓派搭建NAS之一:安装系统

准备工作 先提前准备好需要的材料树莓派3B以上版本 16GB+ 内存卡(内存卡速率最好高一些,不然系统容易卡顿) 内存卡读卡器 树莓派镜像烧录器 网线/无线网烧录系统 1、下载并安装 Raspberry Pi Imager 前往 Raspberry…

详细介绍:电子电气架构 --- 中国汽车座舱产品与技术发展趋势展望

详细介绍:电子电气架构 --- 中国汽车座舱产品与技术发展趋势展望pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

新手Markdown学习

Markdown 学习 标题 三级标题 四级标题 +空格+标题名称 几个#代表几级标题(最多六级) 字体 Hello,world!(头尾+**) Hello,world!(头尾+*) Hello,world!(头尾+***) Hello,world!(头尾+~~) 引用好好学习,天天…

马云归来,“新零售”不死 - 指南

马云归来,“新零售”不死 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

网站关键词如何选取用织梦做网站需不需授权

FROM Dockerfile中的第一个指令&#xff0c;也是一个必须的指令。它用于指定构建新镜像时所基于的基础镜像。 FROM <image>:<tag> FROM nginx:1.25.1-alpineRUN 指令在Dockerfile中可以出现多次&#xff0c;并且每个RUN指令都会创建一个新的镜像层。为了减少镜像…

银川网站开发公司电话怎么建立自己的小程序

1.更改图像大小 通常情况下&#xff0c;如果我们想在某些上传图片&#xff0c;会发现我们的图片可能会过大或者过小&#xff0c;为此&#xff0c;我们需要调整图像的大小&#xff0c;使之符合网站的规则。 首先打开photoshop&#xff0c;打开一张图片。首先我们需要了解这张图…

SQL正则表达式总结 - 实践

SQL正则表达式总结 - 实践2025-10-02 22:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

Pdfminer-Vulnerability-Research

Pdfminer code auditing and script development script path: https://github.com/L1nq0/Pdfminer-CMap-Generator CMapDB Deserialization cmapdb.py#CMapDB._load_data 调用 pickle.loads_load_data 传入参数 name…

从事网站建泰安网站建设公司带

目录 一、界面演示 二、设备列表 三、抖动单元格 四、设备模型 五、设备编辑 本项目的交流QQ群:701889554 物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html 物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.htm…

营口工程建设信息网站wordpress frame

二进制是一种数制&#xff0c;也称为基数为2的数制。在二进制系统中&#xff0c;数值使用0和1这两个数字来表示。每一位二进制数字称为一个比特&#xff08;bit&#xff09;&#xff0c;是计算机中最基本的信息单位。多个比特组合在一起可以表示更大的数值或数据。 在计算机科…

10.2笔记

HBase 数据库 架构理解: HMaster:管理 RegionServer 的负载均衡、Region 分配等。 RegionServer:负责数据的读写操作,管理多个 Region。 ZooKeeper:协调集群状态,监控 RegionServer 存活。 HDFS:底层存储,HBas…

阜阳网站制作公司去哪找可信赖的广州做网站

前言&#xff1a;在最近学习 Vue.js 的时候&#xff0c;看到国外一篇讲述了如何使用 Vue.js 和 Vuex 来构建一个简单笔记的单页应用的文章。感觉收获挺多&#xff0c;自己在它的例子的基础上进行了一些优化和自定义功能&#xff0c;在这里和大家分享下学习心得。 在这篇教程中我…

北京国互网网站建设报价wordpress 判断手机

&#x1f600;前言 中文乱码处理 &#x1f3e0;个人主页&#xff1a;尘觉主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是尘觉&#xff0c;希望我的文章可以帮助到大家&#xff0c;您的满意是我的动力&#x1f609;&#x1f609; 在csdn获奖荣誉: &#x1f3c…

网站可以随便创建么北京网站设计与制作公司

最近由于需要来学习一下pymysql。 先来认识一下pymysql&#xff1a; PyMySQL 是 Python 中一个用于连接 MySQL 数据库的库。它允许 Python 程序通过简单的 API 调用来连接、操作和管理 MySQL 数据库。PyMySQL 是在 Python 中使用纯 Python 编写的&#xff0c;因此它可以在几…

Shell / Bash 学习

一、Shell / Bash 快速 Cheat Sheet(速查手册) 以下摘自 Devhints、LinuxConfig 和 Red Hat 的优秀 Bash cheat sheet 集合:Devhints – Bash Scripting Cheatsheet (Devhints.io cheatsheets) LinuxConfig Bash Sc…

【Linux 架构探幽:从入门到内核・系统编程开篇】基础指令与权限精讲,筑牢框架制作根基

【Linux 架构探幽:从入门到内核・系统编程开篇】基础指令与权限精讲,筑牢框架制作根基pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important…

chisel,spatial和spinalhdl的比较

chisel,spatial和spinalhdl的比较从外表上看,spinalhdl可能要更简明易用一些。 chisel和spatial有强大的生成功能,但是魔术更多一些。 其中chisel在生成的过程中,容易丢失一些信息,需要人为补强。 而spatial则高度…

东方市住房和城乡建设局网站沈阳网站建设的价格

Splunk 是搜索、监控和分析机器生成大数据的软件领先提供商&#xff0c;为其旗舰产品 Splunk Enterprise 发布了紧急安全更新。 这些更新解决了几个构成重大安全风险的关键漏洞&#xff0c;包括远程代码执行 (RCE) 的可能性。 受影响的版本包括 * 9.0.x、9.1.x 和 9.2.x&…