有汇源上下界最大流
有源汇上下界最大流最小流理解
题目
理解

#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. 有上下界的网络流1-无源汇带上下界网络流SGU194

    有上下界的网络流1-无源汇带上下界网络流SGU194 今天开始啃网络流了.对于求解无源汇带上下界的网络流,我们可以这样建图: 建图模型:          以前写的最大流默认的下界为0,而这里的下界却 ...

  2. loj#115. 无源汇有上下界可行流

    \(\color{#0066ff}{ 题目描述 }\) 这是一道模板题. \(n\) 个点,\(m\) 条边,每条边 \(e\) 有一个流量下界 \(\text{lower}(e)\) 和流量上界 \ ...

  3. CodeForces - 1252L Road Construction(基环树+有源汇有上下界的最大流)

    题目链接:点击查看 题目大意:给出 n 个节点,再给出 n 个出边,保证所有的边能将 n 个点连通,每条出边可以用 m[ i ] 种材料选择其一建造,然后有 k 个工人,每个工人只可以使用一种材料建造 ...

  4. 洛谷 - P5192 Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流(有源汇有上下界的最大流)

    题目链接:点击查看 题目大意:一共有 n 天,每天可以拍最多 D[ i ] 张照片,每天可以选择 C[ i ] 个少女进行拍照,每个少女的编号为 T[ i ][ j ] ,每个少女需要拍摄照片的区间为 ...

  5. [BZOJ3698]XWW的难题(有源汇有上下界的最大流)

    题目描述 传送门 题解 最大流和可行流的做法的区别:先ss->tt做一遍最大流,判断是否可行:然后将t->s,inf这条边去掉,再做一遍s->t的最大流,即为答案 这道题原图的建图方 ...

  6. 无源汇有上下界可行流(网络流进阶)

    无源汇有上下界可行流(也就是循环流) 模型:一个网络,求出一个流,使得每条边的流量必须>=Li且<=Hi, 每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终) ...

  7. 有源汇有上下界最大流/最小流 配题(HDU 3157)

    因为是有源汇所以设源点为 s,汇点为 t. 有源汇有上下界最大流: 连接一条 t 指向 s 的边,容量为 INF. 通过上述步骤,现在图变成了无源汇网络. 引入超级源点 S,超级汇点 T. 连接一条 ...

  8. LOJ116 有源汇有上下界最大流(上下界网络流)

    考虑有源汇上下界可行流:由汇向源连inf边,那么变成无源汇图,按上题做法跑出可行流.此时该inf边的流量即为原图中该可行流的流量.因为可以假装把加上去的那些边的流量放回原图. 此时再从原来的源向原来的 ...

  9. LOJ - #116. 有源汇有上下界最大流(有源汇有上下界的最大流)

    题目链接:点击查看 题目大意:给出一个 n 个点和 m 条边的有向图,每条边都有一个流量限制 [ lower , upper ],给定源点 s 和汇点 t ,求出源点到汇点的最大流 题目分析:参考博客 ...

最新文章

  1. Jboss RestEasy构建简单的RESTful Web Services示例(1)
  2. GPS 气压计高度测量
  3. C语言打印链表的中间节点的算法(附完整源码)
  4. 薅羊毛丨5个平价好物,终于终于终于打折了!
  5. Linux下几种文件传输命令 sz rz sftp scp
  6. 【转】大厦将倾,互联网将如何变革传统行业(上)
  7. 泛型之类型擦除和桥接方法
  8. 测绘工程所用软件评析
  9. 三星S10+顶配版现身GeekBench:搭载Exynos 9820处理器
  10. React-组件通信
  11. 【NOIP2010】【codevs1069】关押罪犯(并查集补集,拆点)
  12. Yahoo Web UIs——Java开发者丰富的Web UI
  13. Python urllib2 设置超时时间并处理超时异常
  14. 番茄花园 Ghost XP SP3 极速装机版 V2013.05
  15. GNS3 思科交换机配置三层转发
  16. 交易类APP原型设计分享 - 5miles
  17. unity骨骼动画学习
  18. 第一百二十一天 : varnish
  19. 裁剪左上角x左上角y填什么_在“context.moveTo(x,y);”中,x、y 是相对于【 】的左上角。...
  20. 那些年,我们常见的那些人

热门文章

  1. linux命令前期记不住,linux前期 - 浪里小白龙l的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. 随机数字信号处理实验报告三——Levinson和Burg递推法MATLAB实现
  3. 台式计算机耗电,台式电脑和笔记本耗电量对比,分别是多少?
  4. phpmywind 手机站多语言版本
  5. 拜尔滤色拜尔滤色镜_如何在iPhone或iPad上启用滤色器以方便眼睛阅读
  6. Android利用SpannableStringBuilder设置TextView中部分文字的颜色...
  7. cython 安装升级_浅尝Kivy
  8. 关于 - TypeError: dict.get() takes no keyword arguments
  9. Android实时监听短信并上传服务器
  10. (附源码)springboot社区疫苗接种管理系统 毕业设计 281442