当前位置: 首页 > news >正文

网络流 最大流 Dinic 算法

模板:洛谷p3376

#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];
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;
}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;return 0;
}
http://www.hskmm.com/?act=detail&tid=23159

相关文章:

  • 2025.10.2 测试
  • 数学章节总结
  • 软件工程_作业一
  • CF VP 记录
  • LabVIEW与PLC 汽车驻车制动自动调整 - 实践
  • 04. 布局管理
  • 关于安装博客园皮肤中有关于配置音乐播放器的补充(awescnb)
  • AGC VP 记录 2
  • 2025 --【J+S 二十连测】-- 第四套 总结
  • Websocket+cpolar:如何轻松实现服务远程访问? - 教程
  • 如何用C语言实现5种基本的排序算法
  • 函数-装饰器基础知识+推导式
  • VUE - 实战 2
  • QBXT2025S刷题 Day1
  • 2025多校冲刺CSP模拟赛1(螳臂复活祭)
  • mobvista三月之旅(In Peking)
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(草莓) - 指南
  • P6782 [Ynoi2008] rplexq
  • AT_agc040_b [AGC040B] Two Contests
  • AT_arc084_b [ABC077D] Small Multiple 题目分析
  • 287. 寻找重复数
  • 福州市 2025 国庆集训 Day2 前三题题解
  • 2025 年马赛克厂家 TOP 企业品牌推荐排行榜,陶瓷,游泳池,喷墨,冰裂,拼花,防滑,复古,家装马赛克推荐这十家公司!
  • oppoR9m刷Linux系统: 手动备份系统与基带IMEI/NVRAM/QCN
  • 原来你是这样的claude code aciton:没想象中好
  • 实用指南:【Python】正则表达式
  • FlareOn1 -- 5get_it
  • 2025 年阀门厂家 TOP 企业品牌推荐排行榜,管道阀门,气动,调节,电动执行器,生产,电磁,不锈钢,进口,耐高温阀门推荐这十家公司
  • 深入解析:Ceph 分布式存储学习笔记(二):池管理、认证和授权管理与集群配置(下)
  • tcp与udp 协议 - 摘星