正题

题目链接:https://loj.ac/p/116


题目大意

nnn个点mmm条边的一张图,每条边有流量上下限制,求源点到汇点的最大流。


解题思路

先别急着求上面那个,考虑一下怎么求无源点汇点的上下界可行流。

可以考虑先把下限流满,这样就会出现有的点流量不均衡的问题,考虑每个点除了下限以外还有附加流量,这些附加流量会最多占能每条边r−lr-lr−l这么多的流量,可以先建立一张每条流量都是r−lr-lr−l的图。

定义一个点的did_idi​为该点的入度减去出度(流入的流量减去流出的流量),然后对于一个点如果它的did_idi​大于000,那么它需要向其他点补充流量,建立一个超级源点SSS向它连边,流量为did_idi​。同理如果一个点的did_idi​小于000就连向超级汇点TTT。

这样就搞定了无源点汇点的上下界可行流问题了。

然后考虑有源汇点s,ts,ts,t怎么办,那么也就是ttt可以无限接受,sss可以无限输送。那么如果ttt向sss连一条infinfinf的边,那么就可以保证s,ts,ts,t的功能又能保证流量守恒了。
之后直接和无源点汇点的一样做就好了。

然后要求最大流,先跑一次有没有可行的再考虑流量能够浮动的范围,此时我们需要在刚刚的残量网络上找从sss到ttt的增广路来增大sss到ttt的流量,那么删掉刚刚t−>st->st−>s的边然后跑s−>ts->ts−>t的最大流就好了。

最小流的话就是从t−>st->st−>s跑最大流


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=210,inf=1e9;
struct node{int to,next,w;
}a[41000];
int n,m,tot,in[N],out[N],d[N];
int ls[N],cur[N],dep[N];
queue<int> q;
void addl(int x,int y,int w){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;a[tot].w=w;a[++tot].to=x;a[tot].next=ls[y];ls[y]=tot;a[tot].w=0;return;
}
bool bfs(int s,int t){while(!q.empty())q.pop();q.push(s);memset(dep,0,sizeof(dep));dep[s]=1;for(int i=1;i<=t;i++)cur[i]=ls[i];while(!q.empty()){int x=q.front();q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(dep[y]||!a[i].w)continue;q.push(y);dep[y]=dep[x]+1;if(y==t)return 1;}}return 0;
}
int dinic(int x,int flow,int t){if(x==t)return flow;int rest=0,k;for(int &i=cur[x];i;i=a[i].next){int y=a[i].to;if(dep[x]+1!=dep[y]||!a[i].w)continue;rest+=(k=dinic(y,min(flow-rest,a[i].w),t));a[i].w-=k;a[i^1].w+=k;if(rest==flow)return rest;}if(!rest)dep[x]=0;return rest;
}
int main()
{int ans=0,sum=0,s,t,S,T;scanf("%d%d%d%d",&n,&m,&S,&T);s=n+1;t=s+1;tot=1;for(int i=1;i<=m;i++){int x,y,l,u;scanf("%d%d%d%d",&x,&y,&l,&u);addl(x,y,u-l);d[y]+=l;d[x]-=l;}for(int i=1;i<=n;i++)if(d[i]>0)addl(s,i,d[i]),sum+=d[i];else addl(i,t,-d[i]);addl(T,S,inf);while(bfs(s,t))ans+=dinic(s,inf,t);if(ans!=sum)return puts("please go home to sleep");ans=a[tot].w;a[tot].w=a[tot^1].w=0;while(bfs(S,T))ans+=dinic(S,inf,T);printf("%d\n",ans);
}

Loj#116-[模板]有源汇有上下界最大流相关推荐

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

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

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

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

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

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

  4. LOJ - #117. 有源汇有上下界最小流(有源汇有上下界的最小流)

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

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

    3698: XWW的难题 Time Limit: 10 Sec  Memory Limit: 128 MB [Submit][Status][Discuss] Description XWW是个影响力 ...

  6. 图论:有源汇有上下界最小流

    这次就是最小流了 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const ll I ...

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

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

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

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

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

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

最新文章

  1. talib 中文文档(八): Momentum Indicator Functions 动量指标
  2. 活久见啊,WPF工资已经这么高了!
  3. MessageFormat占位符使用
  4. 覆盖索引与联合索引_Mysql性能优化:为什么要用覆盖索引?
  5. Maven 项目添加jetty 插件
  6. 七、Oracle学习笔记:数值函数
  7. spring security+cas 单点登录示例(单点退出)
  8. 工控计算机+isa接口,研华工控机IPC-610系列可提供多个PCI、ISA总线
  9. linux下对IP地址的转发和端口的伪装----利用iptables部署
  10. 传染病研究-非靶向下一代宏基因组测序(mNGS)分析
  11. RabbitMQ(七)延迟队列
  12. struct所占的内存
  13. 大学生python心得1000字_大学生心得体会1000字
  14. 在痛苦的日子里笑出声来
  15. 在手机安装 Kali Linux
  16. 服务器c盘清理文件,云服务器c盘满了怎么清理
  17. test120200612shu
  18. 如何检查QFN封装焊接是否正确
  19. STemWin入门实战学习
  20. 《PostgreSQL修炼之道-从小工到专家》读书笔记

热门文章

  1. 缓存在哪里_什么是MyBatis缓存技术
  2. vue从url中获取token并加入到 请求头里_BATJ都会用到的接口鉴权cookie、session 和token...
  3. dw自动滚动图片_3分钟搞定图片懒加载
  4. 苏泊尔搭载华为鸿蒙系统,华为鸿蒙打算在一年内跨过生死线,拿下16%的市场份额...
  5. mysql 错误 0152_SP2-1503 SP2-0152 错误解决
  6. python while循环true_Python while循环,pause while not,true时继续?
  7. 栈在前端中的应用,顺便再了解下深拷贝和浅拷贝!
  8. [数据结构-严蔚敏版]P46栈的顺序存储表示
  9. C++ class实现链栈(完整代码)
  10. 算法-二分搜索-找出最大值和次大值