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, 每个点必须满足总流入量=总流出量(流量守恒)(这个流的特点是循环往复,无始无终) ...
随机推荐
- CSS 3栏自适应布局
绝对定位 css html,body{margin: 0px;height:100%;} div{height: 100%;} .left,.right {top: 0px;position: abs ...
- Eclipse “cannot be resolved to a type”
遇到这坑爹的问题,网上各种答案. 只有这个能解决我的问题,eclipse机制问题: Eclipse “cannot be resolved to a type”
- 表格(table)
Title 主机名 端口 操作 1111 10023 查看详情 修改 表头1 表头1 表头1 表头1 1 1 1 1 1 1 1 1 1 <!DOCTYPE html><html l ...
- os内置模块
import os 1.os.getcwd() # 获得当前文件路径 2.os.chdir() # 改变当前目录 3.os.curdir # . 表示当前目录 4.os.pardir # 表示上 ...
- 迷你MVVM框架 avalonjs 1.3.6发布
本版本是一次重要的升级,考虑要介绍许多东西,也有许多东西对大家有用,也发到首页上来了. 本来是没有1.36的,先把基于静态收集依赖的1.4设计出来后,发现改动太多,为了平缓升级起见,才减少了一部分新特 ...
- oracle 基本信息
查看Oracle是32位还是64位的方法: 方法一:使用sqlplus 64位: [oracle@qs-wg-db2 ~]$ sqlplus / as sysdba; SQL*Plus: Rele ...
- samtools软件的使用
1)samtools简介--------------------------------------------------------------------------背景:前面我们讲过sam/b ...
- Redis事务的简单理解
Redis事务的命令如下所示: 先以 MULTI 开始一个事务, 然后将多个命令入队到事务中, 最后由 EXEC 命令触发事务, 一并执行事务中的所有命令 示例如下: //开始一个事务 > MU ...
- Windows phone自定义控件(无外观控件)——FlipPanel
编码前 无外观自定义控件的定义在上一篇中已经有了,至于这一篇的自定义控件,比之前多加入了状态的变化,就像默认的Button具有Pressed.Normal等状态.在状态转变的同时可以加上一些动画,可以 ...
- .net core webapi 部署windows server 2008 r2 笔记
WebAPI部署文档 安装dotnet-dev-win-x64.1.0.4 安装DotNetCore.1.1.0-WindowsHosting 安装vc_redist.x64 安装Windows6.1 ...