2018.08.20 loj#115. 无源汇有上下界可行流(模板)
传送门
又get到一个新技能,好兴奋的说啊。
一道无源汇有上下界可行流的模板题。
其实这东西也不难,就是将下界变形而已。
准确来说,就是对于每个点,我们算出会从它那里强制流入与流出的流量,然后与超级源点,汇点连边,这样我们就成功去掉了下界的限制,上界从r变成了r-l,这样子跑一边最大流,看一下是不是每一条强制流完的边都流完了,如果有边没有流完,说明无法保证流出全部下界,否则的话就可以流完所有下界,又因为是要求可行流,所以只要下界留完了随便输出就行了。
代码:
#include<bits/stdc++.h>
#define N 705
#define M 500005
using namespace std;
inline int read(){
int ans=0;
char ch=getchar();
while(!isdigit(ch))ch=getchar();
while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
return ans;
}
inline void write(int x){
if(x>9)write(x/10);
putchar((x%10)^48);
}
int n,m,s,t,first[N],d[N],cnt=0,m_[N],low[M],tot[M];
struct Node{int v,next,c;}e[M];
inline void add(int u,int v,int c){e[cnt].v=v,e[cnt].c=c,e[cnt].next=first[u],first[u]=cnt++;}
inline bool bfs(){
queue<int>q;
memset(d,-1,sizeof(d));
q.push(s),d[s]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=first[x];~i;i=e[i].next){
int v=e[i].v;
if(d[v]!=-1||e[i].c<=0)continue;
d[v]=d[x]+1;
if(v==t)return true;
q.push(v);
}
}
return false;
}
inline int dfs(int x,int f){
if(x==t||!f)return f;
int flow=f;
for(int i=first[x];~i;i=e[i].next){
int v=e[i].v;
if(flow&&d[v]==d[x]+1&&e[i].c>0){
int tmp=dfs(v,min(e[i].c,flow));
if(!tmp)d[v]=-1;
e[i].c-=tmp,e[i^1].c+=tmp,flow-=tmp;
}
}
return f-flow;
}
inline bool check(){
for(int i=first[s];~i;i=e[i].next)if(e[i].c>0)return false;
for(int i=first[t];~i;i=e[i].next)if(e[i^1].c>0)return false;
return true;
}
int main(){
memset(first,-1,sizeof(first));
n=read(),m=read(),s=0,t=n+1;
for(int i=1;i<=m;++i){
int u=read(),v=read();
low[i]=read();
int mx=read();
add(u,v,mx-low[i]),add(v,u,0),m_[u]-=low[i],m_[v]+=low[i];
}
int tmp=cnt;
for(int i=1;i<=n;++i){
if(m_[i]>0)add(s,i,m_[i]),add(i,s,0);
if(m_[i]<0)add(i,t,-m_[i]),add(t,i,0);
}
int ans=0;
while(bfs())ans+=dfs(s,0x3f3f3f3f);
if(!check()){cout<<"NO";return 0;}
cout<<"YES"<<'\n';
for(int i=0;i<=tmp-1;i+=2)cout<<e[i^1].c+low[(i+2)/2]<<'\n';
return 0;
}
2018.08.20 loj#115. 无源汇有上下界可行流(模板)的更多相关文章
- LOJ [#115. 无源汇有上下界可行流](https://loj.ac/problem/115)
#115. 无源汇有上下界可行流 先扔个板子,上下界的东西一点点搞,写在奇怪的合集里面 Code: #include <cstdio> #include <cstring> # ...
- [loj#115] 无源汇有上下界可行流 网络流
#115. 无源汇有上下界可行流 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数据 题 ...
- loj#115. 无源汇有上下界可行流
\(\color{#0066ff}{ 题目描述 }\) 这是一道模板题. \(n\) 个点,\(m\) 条边,每条边 \(e\) 有一个流量下界 \(\text{lower}(e)\) 和流量上界 \ ...
- 2018.08.20 loj#116. 有源汇有上下界最大流(模板)
传送门 貌似就是转成无源汇,然后两遍最大流搞定? 其实第二遍跑最大流是自动加上了第一次的答案. 代码: #include<bits/stdc++.h> #define N 100005 # ...
- 2018.08.20 loj#117. 有源汇有上下界最小流(模板)
传送门 这题真有意思... 先是有一个点T的我怀疑人生. 然后学大佬们封装了我的dinic就莫名其妙的过了??? 所以说锅给谁好呢? 给dinic吧... 解法就是先求出一段可行流,然后从t到s加一条 ...
- LibreOJ #115. 无源汇有上下界可行流
二次联通门 : LibreOJ #115. 无源汇有上下界可行流 /* LibreOJ #115. 无源汇有上下界可行流 板子题 我也就会写写板子题了.. */ #include <cstdio ...
- 【LOJ115】无源汇有上下界可行流(模板题)
点此看题面 大致题意: 给你每条边的流量上下界,让你判断是否存在可行流.若有,则还需输出一个合法方案. 大致思路 首先,每条边既然有一个流量下界\(lower\),我们就强制它初始流量为\(lower ...
- Zoj 2314 Reactor Cooling(无源汇有上下界可行流)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 题意: 给n个点,及m根pipe,每根pipe用来流躺液体的,单向 ...
- 无源汇有上下界可行流(ZQU 1590)
无源汇有上下界可行流(也就是循环流) 模型:一个网络,求出一个流,使得每条边的流量必须>=Li且<=Hi, 每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终) ...
随机推荐
- git提交到远程仓库
Git概述 什么是Git? 刚开始对这个东西也感到挺迷茫,并且问了好多已经学习android一段时间的同学也是一头雾水,直到了解并使用之后,才体会到Git的好处以及重要意义. Git:是目前世界上最先 ...
- CSS 3栏自适应布局
绝对定位 css html,body{margin: 0px;height:100%;} div{height: 100%;} .left,.right {top: 0px;position: abs ...
- PadLeft 补零
补零 PadLeft -Caption.Length())+Caption; UnicodeString __fastcall StringOfChar(WideChar Ch, int Count) ...
- EXCEL 数组公式
数组里的元素,同一行内的各元素用英文逗号“,”分开,用英文分号“;”将各行分开 3.单列数组与单行数组的计算 两个数组相加,查看结果是几行几列:在任意单元格输入公式“=A80:A83+B87:E87” ...
- Linux SWAP 交换分区配置说明(转)
一.SWAP 说明 1.1 SWAP 概述 当系统的物理内存不够用的时候,就需要将物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被 ...
- UI5-文档-4.30-Debugging Tools
虽然我们在前面的步骤中添加了一个基本的测试覆盖率,但是我们似乎不小心破坏了我们的应用程序,因为它不再显示价格到我们的发票上.我们需要调试这个问题,并在有人发现之前修复它. 幸运的是,SAPUI5提供了 ...
- Java中的默认构造函数
java中如果在一个类中没有写明任何构造函数的,那么会存在一个无参的构造函数,如下: public class Children { private String name; private Stri ...
- 吴裕雄 实战PYTHON编程(4)
import hashlib md5 = hashlib.md5()md5.update(b'Test String')print(md5.hexdigest()) import hashlib md ...
- express + mongodb 搭建一个简易网站 (四)
express + mongodb 搭建一个简易网站 (四) 目前网站整体页面都已经能全部展示了,但是,整个网站还有两个块需要做完才能算完整,一个连接数据库,目前网站上的数据都是抓取的本地假数据,所以 ...
- java 解析命令行参数
下载地址: https://jcenter.bintray.com/org/apache/commons/com.springsource.org.apache.commons.cli/1.2.0/ ...