有汇源上下界最大流和最小流
有汇源上下界最大流
有源汇上下界最大流最小流理解
题目
理解
#include<bits/stdc++.h>
using namespace std;
const int N=610,M=3e4,INF=0x3f3f3f3f;
int n,m,S,T;
int s,t;
int d[N];
int q[N],cur[N],h[N],ne[M],e[M],f[M],idx,A[N];void add(int a,int b,int c,int d)
{e[idx]=b,ne[idx]=h[a],f[idx]=d-c,h[a]=idx++;e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++;
}bool bfs()
{memset(d,-1,sizeof(d));int hh=0,tt=0;q[hh]=S,cur[S]=h[S],d[S]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];~i;i=ne[i]){int ver=e[i];if(d[ver]==-1&&f[i]){d[ver]=d[t]+1;cur[ver]=h[ver];if(ver==T) return true;q[++tt]=ver;}}}return false;
}int find(int u,int limit)
{if(u==T) return limit;int flow=0;for(int i=cur[u];~i&&flow<limit;i=ne[i]){cur[u]=i;int ver=e[i];if(d[ver]==d[u]+1&&f[i]){int t=find(ver,min(f[i],limit-flow));if(!t) d[ver]=-1;f[i]-=t,f[i^1]+=t,flow+=t;}}return flow;
}int dinic()
{int r=0;int flow;while(bfs()) while(flow=find(S,INF)) r+=flow;return r;
}int main()
{scanf("%d%d%d%d",&n,&m,&s,&t);S=0,T=n+1;memset(h,-1,sizeof(h));int tot=0;for(int i=1;i<=m;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);add(a,b,c,d);A[a]-=c,A[b]+=c;}for(int i=1;i<=n;i++){if(A[i]>0) add(S,i,0,A[i]),tot+=A[i];else if(A[i]<0) add(i,T,0,-A[i]);}add(t,s,0,INF);if(dinic()<tot){puts("No Solution");}else{int res=f[idx-1];S=s,T=t;f[idx-1]=f[idx-2]=0;printf("%d\n",res+dinic());}return 0;
}
有汇源上下界最小流
题目
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,M=5e6+10,INF=0x3f3f3f3f;
int n,m,S,T;
int s,t;
int d[N];
int q[N],cur[N],h[N],ne[M],e[M],f[M],idx,A[N];void add(int a,int b,int c,int d)
{e[idx]=b,ne[idx]=h[a],f[idx]=d-c,h[a]=idx++;e[idx]=a,ne[idx]=h[b],f[idx]=0,h[b]=idx++;
}bool bfs()
{memset(d,-1,sizeof(d));int hh=0,tt=0;q[hh]=S,cur[S]=h[S],d[S]=0;while(hh<=tt){int t=q[hh++];for(int i=h[t];~i;i=ne[i]){int ver=e[i];if(d[ver]==-1&&f[i]){d[ver]=d[t]+1;cur[ver]=h[ver];if(ver==T) return true;q[++tt]=ver;}}}return false;
}int find(int u,int limit)
{if(u==T) return limit;int flow=0;for(int i=cur[u];~i&&flow<limit;i=ne[i]){cur[u]=i;int ver=e[i];if(d[ver]==d[u]+1&&f[i]){int t=find(ver,min(f[i],limit-flow));if(!t) d[ver]=-1;f[i]-=t,f[i^1]+=t,flow+=t;}}return flow;
}int dinic()
{int r=0;int flow;while(bfs()) while(flow=find(S,INF)) r+=flow;return r;
}int main()
{scanf("%d%d%d%d",&n,&m,&s,&t);S=0,T=n+1;memset(h,-1,sizeof(h));int tot=0;for(int i=1;i<=m;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);add(a,b,c,d);A[a]-=c,A[b]+=c;}for(int i=1;i<=n;i++){if(A[i]>0) add(S,i,0,A[i]),tot+=A[i];else if(A[i]<0) add(i,T,0,-A[i]);}add(t,s,0,INF);if(dinic()<tot){puts("No Solution");}else{int res=f[idx-1];S=t,T=s;f[idx-1]=f[idx-2]=0;printf("%d\n",res-dinic());}return 0;
}
有汇源上下界最大流和最小流相关推荐
- 有上下界的网络流1-无源汇带上下界网络流SGU194
有上下界的网络流1-无源汇带上下界网络流SGU194 今天开始啃网络流了.对于求解无源汇带上下界的网络流,我们可以这样建图: 建图模型: 以前写的最大流默认的下界为0,而这里的下界却 ...
- loj#115. 无源汇有上下界可行流
\(\color{#0066ff}{ 题目描述 }\) 这是一道模板题. \(n\) 个点,\(m\) 条边,每条边 \(e\) 有一个流量下界 \(\text{lower}(e)\) 和流量上界 \ ...
- CodeForces - 1252L Road Construction(基环树+有源汇有上下界的最大流)
题目链接:点击查看 题目大意:给出 n 个节点,再给出 n 个出边,保证所有的边能将 n 个点连通,每条出边可以用 m[ i ] 种材料选择其一建造,然后有 k 个工人,每个工人只可以使用一种材料建造 ...
- 洛谷 - P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流(有源汇有上下界的最大流)
题目链接:点击查看 题目大意:一共有 n 天,每天可以拍最多 D[ i ] 张照片,每天可以选择 C[ i ] 个少女进行拍照,每个少女的编号为 T[ i ][ j ] ,每个少女需要拍摄照片的区间为 ...
- [BZOJ3698]XWW的难题(有源汇有上下界的最大流)
题目描述 传送门 题解 最大流和可行流的做法的区别:先ss->tt做一遍最大流,判断是否可行:然后将t->s,inf这条边去掉,再做一遍s->t的最大流,即为答案 这道题原图的建图方 ...
- 无源汇有上下界可行流(网络流进阶)
无源汇有上下界可行流(也就是循环流) 模型:一个网络,求出一个流,使得每条边的流量必须>=Li且<=Hi, 每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终) ...
- 有源汇有上下界最大流/最小流 配题(HDU 3157)
因为是有源汇所以设源点为 s,汇点为 t. 有源汇有上下界最大流: 连接一条 t 指向 s 的边,容量为 INF. 通过上述步骤,现在图变成了无源汇网络. 引入超级源点 S,超级汇点 T. 连接一条 ...
- LOJ116 有源汇有上下界最大流(上下界网络流)
考虑有源汇上下界可行流:由汇向源连inf边,那么变成无源汇图,按上题做法跑出可行流.此时该inf边的流量即为原图中该可行流的流量.因为可以假装把加上去的那些边的流量放回原图. 此时再从原来的源向原来的 ...
- LOJ - #116. 有源汇有上下界最大流(有源汇有上下界的最大流)
题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的有向图,每条边都有一个流量限制 [ lower , upper ],给定源点 s 和汇点 t ,求出源点到汇点的最大流 题目分析:参考博客 ...
最新文章
- Jboss RestEasy构建简单的RESTful Web Services示例(1)
- GPS 气压计高度测量
- C语言打印链表的中间节点的算法(附完整源码)
- 薅羊毛丨5个平价好物,终于终于终于打折了!
- Linux下几种文件传输命令 sz rz sftp scp
- 【转】大厦将倾,互联网将如何变革传统行业(上)
- 泛型之类型擦除和桥接方法
- 测绘工程所用软件评析
- 三星S10+顶配版现身GeekBench:搭载Exynos 9820处理器
- React-组件通信
- 【NOIP2010】【codevs1069】关押罪犯(并查集补集,拆点)
- Yahoo Web UIs——Java开发者丰富的Web UI
- Python urllib2 设置超时时间并处理超时异常
- 番茄花园 Ghost XP SP3 极速装机版 V2013.05
- GNS3 思科交换机配置三层转发
- 交易类APP原型设计分享 - 5miles
- unity骨骼动画学习
- 第一百二十一天 : varnish
- 裁剪左上角x左上角y填什么_在“context.moveTo(x,y);”中,x、y 是相对于【 】的左上角。...
- 那些年,我们常见的那些人
热门文章
- linux命令前期记不住,linux前期 - 浪里小白龙l的个人空间 - OSCHINA - 中文开源技术交流社区...
- 随机数字信号处理实验报告三——Levinson和Burg递推法MATLAB实现
- 台式计算机耗电,台式电脑和笔记本耗电量对比,分别是多少?
- phpmywind 手机站多语言版本
- 拜尔滤色拜尔滤色镜_如何在iPhone或iPad上启用滤色器以方便眼睛阅读
- Android利用SpannableStringBuilder设置TextView中部分文字的颜色...
- cython 安装升级_浅尝Kivy
- 关于 - TypeError: dict.get() takes no keyword arguments
- Android实时监听短信并上传服务器
- (附源码)springboot社区疫苗接种管理系统 毕业设计 281442