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

  此时再从原来的源向原来的汇跑最大流。超源超汇相关的边已经流满不会再退流,则下界可以满足,并且在此基础上增广是可以保证原图的流量平衡的。求出的最大流即为原图最大流。因为显然原图最大流=可行流流量+原图新增流量,而可行流流量等于汇到源流量,这部分在跑最大流的时候被退流并计入答案。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{int x=0,f=1;char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}while (c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;
}
#define N 210
#define M 50000
#define S 0
#define T 201
#define inf 1000000000
int n,m,w,v,t=-1,p[N],degree[N],l[M],tot=0;
int cur[N],d[N],q[N],ans=0;
struct data{int to,nxt,cap,flow;
}edge[M];
void addedge(int x,int y,int z)
{t++;edge[t].to=y,edge[t].nxt=p[x],edge[t].cap=z,edge[t].flow=0,p[x]=t;t++;edge[t].to=x,edge[t].nxt=p[y],edge[t].cap=0,edge[t].flow=0,p[y]=t;
}
bool bfs(int s,int t)
{memset(d,255,sizeof(d));d[s]=0;int head=0,tail=1;q[1]=s;do{int x=q[++head];for (int i=p[x];~i;i=edge[i].nxt)if (d[edge[i].to]==-1&&edge[i].flow<edge[i].cap){d[edge[i].to]=d[x]+1;q[++tail]=edge[i].to;}}while (head<tail);return ~d[t];
}
int work(int k,int f,int t)
{if (k==t) return f;int used=0;for (int i=cur[k];~i;i=edge[i].nxt)if (d[k]+1==d[edge[i].to]){int w=work(edge[i].to,min(f-used,edge[i].cap-edge[i].flow),t);edge[i].flow+=w,edge[i^1].flow-=w;if (edge[i].flow<edge[i].cap) cur[k]=i;used+=w;if (used==f) return f;}if (used==0) d[k]=-1;return used;
}
void dinic(int s,int t)
{while (bfs(s,t)){memcpy(cur,p,sizeof(p));ans+=work(s,inf,t);}
}
int main()
{
#ifndef ONLINE_JUDGEfreopen("loj116.in","r",stdin);freopen("loj116.out","w",stdout);const char LL[]="%I64d";
#elseconst char LL[]="%lld";
#endifn=read(),m=read(),w=read(),v=read();memset(p,255,sizeof(p));for (int i=1;i<=m;i++){int x=read(),y=read(),low=read(),high=read();addedge(x,y,high-low);degree[y]+=low,degree[x]-=low;l[i]=low;}for (int i=1;i<=n;i++)if (degree[i]>0) addedge(S,i,degree[i]),tot+=degree[i];else if (degree[i]<0) addedge(i,T,-degree[i]);addedge(v,w,inf);dinic(S,T);if (ans<tot) cout<<"please go home to sleep";else ans=0,dinic(w,v),cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/Gloid/p/9420520.html

LOJ116 有源汇有上下界最大流(上下界网络流)相关推荐

  1. Shoot the Bullet(ZOJ3229)(有源汇上下界最大流)

    描述 ensokyo is a world which exists quietly beside ours, separated by a mystical border. It is a utop ...

  2. 有源汇上下界最小费用可行流 ---- P4553 80人环游世界(拆点 + 有源汇上下界最小费用可行流)

    题目链接 题目大意: 解题思路: 又是一道裸题 . 首先它要求第iii个点只经过ViViVi那么我们就拆点ai,ai+na_i,a_{i+n}ai​,ai+n​一个点为入点,一个为出点这条边的流量范围 ...

  3. 有源汇上下界最小费用可行流 ---- P4043 [AHOI2014/JSOI2014]支线剧情(模板)

    题目链接 题目大意: 解题思路: 有源汇上下界最小费用可行流模板题目来着 先建出一个有源汇上下界可行流的图,然后注意建图的时候要把每条边的下界的费用提前加到ans里面 然后再对图跑费用流,就是补齐费用 ...

  4. HDU 3157 Crazy Circuits(有源汇上下界最小流)

    HDU 3157 Crazy Circuits 题目链接 题意:一个电路板,上面有N个接线柱(标号1~N),还有两个电源接线柱 + -.给出一些线路,每一个线路有一个下限值求一个能够让全部部件正常工作 ...

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

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

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

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

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

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

  8. 上下界网络流-无源汇可行流与有源汇最大流

    上下界网络流 2021.9.3 无源汇上下界可行流 之前的最大流讨论一般为有源无下届情况,那么无源汇有上下界可行流应如何求解? 首先要做的是消除下边界,应如何做?在有下届情形下,流网络中的任意一条边的 ...

  9. BZOJ.3698.XWW的难题(有源汇上下界最大流ISAP)

    题目链接 按套路行列作为两部分,连边 \(S->row->column->T\). S向代表行的元素连边cap(A[i][n])(容量上下界为上下取整),代表列的元素向T连边cap( ...

最新文章

  1. 程序员的浪漫,你值得拥有!
  2. 类型参数的约束(C# 编程指南)
  3. Windows Server 2008常见的安全设置
  4. leetcode算法题--二叉树中的伪回文路径
  5. 高德地图和百度地图接口封装遇到的问题(一):重复添加实时路况图层后无法移除
  6. Three.js中显示坐标轴、平面、球体、四方体
  7. Elasticsearch学习笔记1
  8. snmp自动化安装脚本
  9. Docker搭建便捷的开发者环境
  10. 如何看待不会写代码的架构师?
  11. 一年Android工作经验,一举拿下百度、网易、美团、小米、快手等Offer面经
  12. python模块之subprocess
  13. 小米手机android9换字体,教你免费修改小米手机字体
  14. 腾讯电脑管家卸载后的残留信息有哪些
  15. 旧手机别扔,手把手教你DIY一台Linux服务器
  16. DELL服务器硬件报错及对应的解决方法(R710)
  17. SpringBoot项目使用RestTemplate发送请求踩坑记录
  18. 我优化了李笑来的MarkdownHere,附css样式代码,文章排版再也不用愁了
  19. 转-基于OpenGL的3D天空仿真
  20. 阿里云OCR本地图片文字识别

热门文章

  1. 微信 python 2020_2020年最新的Python操控微信教程
  2. minio 并发数_c#(asp.net)线程配置总结
  3. css类选择器或逻辑,深入理解CSS中选择器的逻辑处理
  4. php树莓派魔镜,用树莓派和显示器制作一面“魔镜”
  5. python打开浏览器后带cookie_Python爬虫使用浏览器的cookies:browsercookie
  6. openMVG跑自定义数据出错
  7. 基于tcp connect的端口扫描程序
  8. mysql启动时报错:Starting MySQL ERROR The server quit without updating PID file
  9. 面向对象 抽象(abstract)
  10. java的或等于_Java中的“小于或等于”比较运算符是__________: !=|||=|=