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

【学习笔记】网络流

板子

P3376 【模板】网络最大流
#include<bits/stdc++.h>
#define inf 1e18
using namespace std;int n,m,s,t;
typedef long long LL;
const int N=210,M=1e4+10;
int h[N],to[M],w[M],ne[M],idx=1;
void add(int a,int b,int c){to[++idx]=b;ne[idx]=h[a];h[a]=idx;w[idx]=c;
}
int dep[N],now[N];
bool bfs(){for(int i=1;i<=n;i++){dep[i]=-1;now[i]=h[i];}queue<int> q;q.push(s);dep[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){int v=to[i];if(w[i]&&dep[v]==-1){dep[v]=dep[u]+1;q.push(v);}}}return dep[t]!=-1;
}
LL dfs(int u,LL las){if(u==t) return las;LL ans=0;for(int i=now[u];i&&las;i=ne[i]){int v=to[i];now[u]=i;if(w[i]&&dep[u]+1==dep[v]){int res=dfs(v,min(las,(LL)w[i]));ans+=res;las-=res;w[i]-=res;w[i^1]+=res;}}if(ans==0) dep[u]=-1;return ans;
}
LL Dinic(){LL ans=0;while(bfs()) ans+=dfs(s,inf);return ans;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m>>s>>t;while(m--){int a,b,c;cin>>a>>b>>c;add(a,b,c);add(b,a,0);}cout<<Dinic()<<"\n";return 0;
}
P3381 【模板】最小费用最大流
#include<bits/stdc++.h>
#define inf 1e9+10
using namespace std;
const int N=5010,M=1e5+10;int n,m,s,t;
int h[N],to[M],w[M],c[M],ne[M],idx=1;
int dis[N],vis[N];
int now[N];
void add(int u,int v,int ww,int cc){to[++idx]=v;w[idx]=ww;ne[idx]=h[u];h[u]=idx;c[idx]=cc;
}
bool bfs(){for(int i=1;i<=n;i++){now[i]=h[i];dis[i]=inf;}queue<int> q;q.push(s);dis[s]=0;vis[s]=1;while(q.size()){int u=q.front();q.pop();vis[u]=0;for(int i=h[u];i;i=ne[i]){int v=to[i];if(w[i]&&dis[v]>dis[u]+c[i]){dis[v]=dis[u]+c[i];if(vis[v]) continue;vis[v]=1;q.push(v);}}}return dis[t]!=inf;
}
int cosn=0;
int dfs(int u,int las){if(u==t) return las;int ans=0;vis[u]=1;for(int i=now[u];i&&las;i=ne[i]){int v=to[i];now[u]=i;if(dis[v]==dis[u]+c[i]&&w[i]&&!vis[v]){int res=dfs(v,min(las,w[i]));ans+=res;las-=res;w[i]-=res;w[i^1]+=res;cosn+=res*c[i];}}vis[u]=0;if(ans==0) dis[u]=inf;return ans;
}
int Dinic(){int ans=0;while(bfs()) ans+=dfs(s,inf);return ans;
}
int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin>>n>>m>>s>>t;while(m--){int u,v,w,c;cin>>u>>v>>w>>c;add(u,v,w,c);add(v,u,0,-c);}cout<<Dinic()<<" ";cout<<cosn<<"\n";return 0;
}
P14578 【模板】无源汇上下界可行流
#include<bits/stdc++.h>
#define inf 1e9
using namespace std;
const int N=1010,M=(1e4+2*N)*2;int n,m,s,t;
int h[N],ne[M],w[M],to[M],idx=1;
int beg[M];
int in[N];
void add(int a,int b,int c){to[++idx]=b;ne[idx]=h[a];h[a]=idx;w[idx]=c;
}
int Graph(){for(int i=1;i<=m;i++){int a,b,l,r;cin>>a>>b>>l>>r;r-=l;add(a,b,r);add(b,a,0);in[b]+=l;in[a]-=l;beg[i]=l;}s=n+1;t=n+2;int ans=0;for(int i=1;i<=n;i++){if(in[i]>0){add(s,i,in[i]);add(i,s,0);ans+=in[i];		}else{add(i,t,-in[i]);add(t,i,0);}}return ans;
}
int dep[N],now[N];
bool bfs(){for(int i=0;i<N;i++){dep[i]=-1;now[i]=h[i];}queue<int> q;q.push(s);dep[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){int v=to[i];if(w[i]&&dep[v]==-1){dep[v]=dep[u]+1;q.push(v);}}}return dep[t]!=-1;
}
int dfs(int u,int las){if(u==t) return las;int ans=0;for(int i=now[u];i&&las;i=ne[i]){int v=to[i];now[u]=i;if(w[i]&&dep[v]==dep[u]+1){int res=dfs(v,min(las,w[i]));las-=res;ans+=res;w[i]-=res;w[i^1]+=res;}}if(ans==0) dep[u]=-1;return ans;
}
int Dinic(){int ans=0;while(bfs()) ans+=dfs(s,inf);return ans;
}
int main(){cin>>n>>m;int num=Graph();int ans=Dinic();if(num!=ans) cout<<"No\n";else{cout<<"Yes\n";for(int i=1;i<=m;i++) cout<<beg[i]+w[i*2+1]<<"\n";}return 0;
}
P14579 【模板】有源汇上下界最大流
#include<bits/stdc++.h>
#define inf 1e9+10
using namespace std;
const int N=1010,M=(1e4+N*2)*2;int n,m,s,t,ss,tt;
int in[N];
int h[N],to[M],w[M],ne[M],idx=1;
int add(int a,int b,int c){to[++idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx;return idx;
}
int id;
int Graph(){for(int i=1;i<=m;i++){int a,b,l,r;cin>>a>>b>>l>>r;r-=l;add(a,b,r);add(b,a,0);in[b]+=l;in[a]-=l;}add(t,s,inf);id=add(s,t,0);ss=n+1,tt=n+2;int ans=0;for(int i=1;i<=n;i++){if(in[i]>0){ans+=in[i];add(ss,i,in[i]);add(i,ss,0);}else{add(i,tt,-in[i]);add(tt,i,0);}}return ans;
}
int dep[N],now[N];
bool bfs(int s,int t){for(int i=0;i<N;i++){dep[i]=-1;now[i]=h[i];}queue<int> q;q.push(s);dep[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){int v=to[i];if(w[i]&&dep[v]==-1){dep[v]=dep[u]+1;q.push(v);}}}return dep[t]!=-1;
}
int dfs(int u,int las,int t){if(u==t) return las;int ans=0;for(int i=now[u];i&&las;i=ne[i]){int v=to[i];now[u]=i;if(w[i]&&dep[v]==dep[u]+1){int res=dfs(v,min(las,w[i]),t);las-=res;ans+=res;w[i]-=res;w[i^1]+=res;}}if(ans==0) dep[u]=-1;return ans;
}
int Dinic(int s,int t){int ans=0;while(bfs(s,t)) ans+=dfs(s,inf,t);return ans;
}
int main(){cin>>n>>m>>s>>t;int num=Graph();int ans=Dinic(ss,tt);if(num!=ans) cout<<"N\n";else{int ans=w[id];w[id]=w[id^1]=0;cout<<ans+Dinic(s,t)<<"\n";}return 0;
}
P14580 【模板】有源汇上下界最小流
#include<bits/stdc++.h>
#define inf 1e9+10
using namespace std;
const int N=1010,M=(1e4+N*2)*2;int n,m,s,t,ss,tt;
int in[N];
int h[N],to[M],w[M],ne[M],idx=1;
int add(int a,int b,int c){to[++idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx;return idx;
}
int id;
int Graph(){for(int i=1;i<=m;i++){int a,b,l,r;cin>>a>>b>>l>>r;r-=l;add(a,b,r);add(b,a,0);in[b]+=l;in[a]-=l;}add(t,s,inf);id=add(s,t,0);ss=n+1,tt=n+2;int ans=0;for(int i=1;i<=n;i++){if(in[i]>0){ans+=in[i];add(ss,i,in[i]);add(i,ss,0);}else{add(i,tt,-in[i]);add(tt,i,0);}}return ans;
}
int dep[N],now[N];
bool bfs(int s,int t){for(int i=0;i<N;i++){dep[i]=-1;now[i]=h[i];}queue<int> q;q.push(s);dep[s]=1;while(q.size()){int u=q.front();q.pop();for(int i=h[u];i;i=ne[i]){int v=to[i];if(w[i]&&dep[v]==-1){dep[v]=dep[u]+1;q.push(v);}}}return dep[t]!=-1;
}
int dfs(int u,int las,int t){if(u==t) return las;int ans=0;for(int i=now[u];i&&las;i=ne[i]){int v=to[i];now[u]=i;if(w[i]&&dep[v]==dep[u]+1){int res=dfs(v,min(las,w[i]),t);las-=res;ans+=res;w[i]-=res;w[i^1]+=res;}}if(ans==0) dep[u]=-1;return ans;
}
int Dinic(int s,int t){int ans=0;while(bfs(s,t)) ans+=dfs(s,inf,t);return ans;
}
int main(){cin>>n>>m>>s>>t;int num=Graph();int ans=Dinic(ss,tt);if(num!=ans) cout<<"N\n";else{int ans=w[id];//cout<<ans<<"\n";w[id]=w[id^1]=0;cout<<ans-Dinic(t,s)<<"\n";}return 0;
}
http://www.jsqmd.com/news/266591/

相关文章:

  • Open-AutoGLM实战指南:自动打卡健康码,1块钱试用
  • ROFL-Player:英雄联盟回放数据分析的终极解决方案
  • 从零实现精准抠图|CV-UNet大模型镜像使用全攻略
  • 极致静音体验:5分钟掌握FanControl智能风扇控制技巧
  • Mem Reduct内存优化终极指南:5分钟让老旧电脑焕然一新
  • 电商评论情感分析:bert-base-chinese案例
  • 魔兽世界API工具完全指南:从宏命令创建到插件开发的全流程解析
  • OpenCV实战:构建高性能艺术风格迁移系统的关键技巧
  • 天龙八部GM工具全面使用手册:从入门到精通
  • 针对紧凑型穿戴产品的SSD1306自定义字体加载方法详解
  • 3行代码实现:OpenDataLab MinerU智能解析学术论文图表
  • MinerU实战教程:产品说明书智能问答机器人开发
  • PDown百度网盘下载器:2025年终极免费高速下载解决方案
  • Qwen3-VL-8B新手指南:云端免配置环境,5分钟快速入门
  • 魔兽世界宏命令与API工具:从技能自动化到插件开发的完整解决方案
  • ROFL-Player:英雄联盟回放数据深度解析利器
  • 天龙八部GM工具:从游戏管理员到世界创造者的进阶之路
  • Universal Pokemon Randomizer ZX 终极宝可梦随机化工具完整使用教程
  • 超强风扇控制神器:FanControl让你的电脑静音又清凉
  • 终极指南:在Linux上一键部署macOS虚拟机的完整方案
  • Cursor免费试用限制突破:全方位技术解决方案详解
  • Revit模型转换终极方案:OBJ与GLTF双格式高效导出技术深度解析
  • 开箱即用!sglang部署的bge-large-zh-v1.5模型服务体验
  • OpenDataLab MinerU教程:科研论文创新性评估
  • AI智能文档扫描仪错误率统计:误检/漏检情况复盘与改进
  • opencode气象建模:Fortran代码AI辅助重构实践
  • DDR4内存布线PCB设计案例深度剖析
  • 英雄联盟智能助手Akari:提升游戏体验的自动化解决方案
  • 如何高效批量下载歌词:跨平台免费工具完整指南
  • ComfyUI IPAdapter模型加载失败的终极排查指南