尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

网络流 最小割 Dinic算法

网络流 最小割 Dinic算法
📅 发布时间:2026/6/19 15:58:25

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;
}

相关新闻

  • 15.VLANIF(2025年9月30日) - 教程
  • Pdfminer-Vulnerability-Research
  • 10.2笔记

最新新闻

  • 东坑镇Shopee店铺优化:提升店铺转化率的10个技巧 - 东莞选校指南
  • 济南奢侈品手表回收哪家靠谱?5家主流奢品回收机构实测对比 - 奢品小当家
  • 闲置黄金别落灰,哈尔滨黄金回收一键预约快速回血,就在合扬 - 奢侈品交易观察员
  • 有据可查!南宁黄金回收公信力榜单出炉,变现直接对照选店 - 沉迷学习28
  • 离婚财产分割律所:5家精通复杂资产分割的团队评测 - 品牌2026
  • 如何用OandBackup打造你的安卓数据安全堡垒?终极备份解决方案深度解析

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号