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

网络流,最大流,EK算法

概念

最大流:

从源点流向汇点的最大流量

增广路:

一条从源点到汇点的所有边的剩余容量>=0的路径

残留网:

由网络中所有结点和剩余容量大于0的边构成的子图,这里的边包括有向边和其反向边

模板题:

洛谷p3376

code:

#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
typedef long long LL;
const int N=2e2+10,M=5e3+10,INF=0x3f3f3f3f;
//id=1,从2,3开始配对
LL n,m,ne[M<<1],h[N],e[M<<1],c[M<<1],id=1,S,T;
LL mf[N],pre[N];
void add(int u,int v,int w){++id;e[id]=v;ne[id]=h[u];c[id]=w;h[u]=id;
}bool bfs(){//找增广路memset(mf,0,sizeof mf);mf[S]=INF;queue<int> q;q.push(S);while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){LL v=e[i],w=c[i];if(!mf[v]&&w){mf[v]=min(mf[u],w);pre[v]=i;//存前驱边q.push(v);if(v==T){return true;}}}}return false;
}LL EK(){//累加可行流LL flow=0;while(bfs()){//更新残留网int v=T;while(v!=S){int i=pre[v];c[i]-=mf[T];c[i^1]+=mf[T];v=e[i^1];}flow+=mf[T];}return flow;
}int main(){cin.tie(nullptr)->sync_with_stdio(false);cin>>n>>m>>S>>T;for(int i=1;i<=m;i++){int u,v,w;cin>>u>>v>>w;add(u,v,w);add(v,u,0);}cout<<EK()<<endl;return 0;
}
http://www.wxhsa.cn/company.asp?id=2347

相关文章:

  • wifi7 MRU介绍
  • 1.认识c语言
  • FallingLeaves 落叶纷飞组件 - yizi
  • Codeforces Round 1048 (Div. 2)
  • 当你发现是打表!!!
  • VMware 17安装Oracle Linux 9.6 详细步骤
  • Div.2 E Rollup
  • synchronized的一些思考
  • 题解:CF2133C The Nether
  • 实变函数1
  • css背景
  • 一元二次方程难题1
  • ios系统和windows系统的区别
  • 2025.9.11 刷题日记
  • C#学习第十 一天 022 事件最后一章
  • 元推理无需数据训练,只需数据检索和验证,成本极大降低,且校验后的数据就是数据资产和规范
  • 如何在Typescript中使用泛型约束
  • 集训总结(五)
  • 使用Android(Kotlin)+ ML Kit:移动端英文数字验证码识别实战
  • Typescript中的泛型
  • windows软件入门指南
  • LLM 生成代码执行代码
  • 网络爬虫(web crawler) - 指南
  • css样式与选择器
  • 水库运行综合管理平台
  • Nginx配置文件介绍
  • 《提问的艺术》笔记:(2025/9/12)
  • 各模态优势(可见光保留细节纹理,红外突出目标)
  • 复习vue
  • 眼下硬件是足够用的,最大的问题还是AI模型本身的能力不太够。没办法让硬件真正用起来,比如AI难以很好地控制灵巧手