【SGU194】Reactor Cooling
题目大意
给定一个无源无汇的网络,边的容量有上下界限制,试构造一个合理的流量。
题目分析
求无源汇上下界的可行流模板题。
①增加一个附加源和汇\(S,T\)。
②把每个节点的\(\sum b_{u,i}\)和\(\sum b_{i,v}\)求出来,\(b\)是指下界。
③对于每个节点,若\(\sum b_{u,i}-\sum b_{i,v}>0\),则添一条从\(S\)到\(i\),容量为\(\sum b_{u,i}-\sum b_{i,v}\)的边。
若\(\sum b_{u,i}-\sum b_{i,v}<0\),则添一条从\(i\)到\(T\),容量为\(\sum b_{i,v}-\sum b_{u,i}\)的边。
④对于原网络中的点,连一条容量为 up-down 的边。
⑤求从\(S\)到\(T\)的最大流,若所有与\(S\)相连的边或与\(T\)相连的边都满载,则这是一个可行解,方案为④中所连边的剩余流量+\(b\)。
代码实现
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=205*205;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int n,m,S,T,num;
struct node{int next,to,pair,flow;}g[N<<1];
int h[N],cnt;
void AddEdge(int x,int y,int z){
g[++cnt].to=y,g[cnt].next=h[x],h[x]=cnt,g[cnt].flow=z,g[cnt].pair=cnt+1;
g[++cnt].to=x,g[cnt].next=h[y],h[y]=cnt,g[cnt].flow=0,g[cnt].pair=cnt-1;
}
int GAP[N],dis[N];
void Init(){
static int q[N];
int l=0,r=1;q[++l]=T,++GAP[dis[T]=1];
while(l<=r){
int x=q[l++];
for(int i=h[x];i;i=g[i].next){
int to=g[i].to;
if(!dis[to])++GAP[dis[to]=dis[x]+1],q[++r]=to;
}
}
}
int Dfs(int x,int Maxf){
if(x==T||!Maxf)return Maxf;
int ret=0;
for(int i=h[x];i;i=g[i].next){
int to=g[i].to;
if(g[i].flow&&dis[x]==dis[to]+1){
int dlt=Dfs(to,min(g[i].flow,Maxf-ret));
g[i].flow-=dlt;
g[g[i].pair].flow+=dlt;
ret+=dlt;
if(dis[S]==num+1||ret==Maxf)return ret;
}
}
if(!(--GAP[dis[x]]))dis[S]=num+1;
else GAP[++dis[x]]++;
return ret;
}
int SAP(){
Init();
int ans=Dfs(S,MAXN);
while(dis[S]<=num)ans+=Dfs(S,MAXN);
return ans;
}
struct Edge{int x,y,b,c;}s[N];
int inb[N],otb[N];
int main(){
n=Getint(),m=Getint(),S=0,T=n+m+1,num=T+1;
for(int i=1;i<=m;i++){
s[i].x=Getint(),s[i].y=Getint(),s[i].b=Getint(),s[i].c=Getint();
AddEdge(s[i].x,s[i].y,s[i].c-s[i].b);
inb[s[i].y]+=s[i].b,otb[s[i].x]+=s[i].b;
}
for(int i=1;i<=n;i++)
if(inb[i]>otb[i])AddEdge(S,i,inb[i]-otb[i]);
else AddEdge(i,T,otb[i]-inb[i]);
SAP();
bool flag=0;
for(int i=h[S];i;i=g[i].next)flag|=(g[i].flow>0);
cout<<((flag)?"NO":"YES");
return 0;
}
【SGU194】Reactor Cooling的更多相关文章
- 【zoj2314】Reactor Cooling 有上下界可行流
题目描述 The terrorist group leaded by a well known international terrorist Ben Bladen is buliding a nuc ...
- 【ZOJ2314】Reactor Cooling(有上下界的网络流)
前言 话说有上下界的网络流好像全机房就我一个人会手动滑稽,当然这是不可能的 Solution 其实这道题目就是一道板子题,主要讲解一下怎么做无源无汇的上下界最大流: 算法步骤 1.将每条边转换成0~u ...
- 【SGU194&ZOJ2314】Reactor Cooling(有上下界的网络流)
题意: 给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质. 并且满足每根pipe一定的流 ...
- 【转】Reactor与Proactor两种模式区别
转自:http://www.cnblogs.com/cbscan/articles/2107494.html 两种IO多路复用方案:Reactor and Proactor 一般情况下,I/O 复用机 ...
- 【转载】Reactor模式,或者叫反应器模式
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- 【转载】Reactor模式和NIO
当前分布式计算 Web Services盛行天下,这些网络服务的底层都离不开对socket的操作.他们都有一个共同的结构:1. Read request2. Decode request3. Proc ...
- acdream 1211 Reactor Cooling 【边界网络流量 + 输出流量】
称号:acdream 1211 Reactor Cooling 分类:无汇的有上下界网络流. 题意: 给n个点.及m根pipe,每根pipe用来流躺液体的.单向的.每时每刻每根pipe流进来的物质要等 ...
- 【有上下界的网络流】ZOJ2341 Reactor Cooling(有上下界可行流)
Description The terrorist group leaded by a well known international terrorist Ben Bladen is bulidi ...
- 【有上下界网络流】【ZOJ】2314 Reactor Cooling
[算法]有上下界网络流-无源汇(循环流) [题解]http://www.cnblogs.com/onioncyc/p/6496532.html //未提交 #include<cstdio> ...
随机推荐
- 5、springcloud整合mybatis注解方式
1.上一篇学习了服务提供者provider,但是并不是单单就学习了服务提供者.中间还穿插使用了Hikari数据源和spring cloud整合mybatis.但是上篇使用mybatis时还是沿用了老的 ...
- 搜索solr
这是我第一次写博客,没有系统性.专业性,东西很杂,也不知道自己在写些什么. SOA分布式架构,所以,使用solr,搜索层的服务层需要搭建起来.搜索系统的表现层搭建 ,打包方式是war包 域名改变代表系 ...
- 项目案例之GitLab的数据迁移
项目案例之GitLab的数据迁移 链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg 提取码:fytm 复制这段内容后打开百度网盘手机App,操作更方 ...
- element-ui中table渲染的快速用法
element-ui中对table数据的渲染有一些模板式的操作,基本按照模板渲染数据即可 基本模板样式如下 <el-table :data="studentData.rows" ...
- 爱的传送带: print(.format())
场景:用Python设计一个程序,可以打印一下祝福语: 致某某某: 今年是XXXX年的元旦, 我的祝福送四方, 东方送你摇钱树, 西方送你永安康, 南方送你成功路, 北方送你钱满 ...
- js 连等操作,,
奥术大师 var hu = { a : , c : , name : }; (function (){ var ccc = bbb = aaa = hu; })() console.log(bbb)* ...
- socket中的绑定
- hightchart 报错 Error in mounted hook: "Error: Highcharts error #17: www.highcharts.com/errors/17"
这个错误是应该导入hightchart 使用的相关的 东西 ,这里是worldcloud import Wordcloud from 'highcharts/modules/wordclou ...
- redux 基础
antd 的使用 1.安装npm install antd --save 2.引入到项目中 import 'antd/dist/antd.css'; // or 'antd/dist/antd.les ...
- WPF ItemControl的源与选择项问题
具体场景: datagrid的行中有个combox 每个行是一个实例A 每个行中的SelectedItem是实例A的一个属性B 我希望实现datagrid的复制Command,具体做法是A序列化反序列 ...