秘制神奇上下界网络流%%%

什么什么有(木)源汇可行流什么的,,看不懂(一下纯属个人sb言论)

看了半天知道点,一个点u,从S连到u的流量是全部流入u的下界,u到T是全部流出u的下界和。(进去出来的约一下)

感觉这个的意思就是保持从进入到出来的下界都符合(强行构造相等??),并且如果能满流,则上界也符合。那么就是可行的。

看了个有上下界最大流什么的,连一个从T-S的边,然后原图就成了无原汇了,那么再加TT,SS,搞上面的,判断可行的同时可以得出来S-T的流量,是一个可行流量。设为sum1.

那么去掉S-T的边和SS,TT点,在跑了一遍的图上跑最大流,就是使原有的图继续增广,可以得出另一个最大流sum2,那么ans=sum1+sum2。(就看了这么一点,sb)

 #include<bits/stdc++.h>
#define N 100005
#define LL long long
#define inf 0x3f3f3f3f
#define ls tr[x][0]
#define rs tr[x][1]
using namespace std;
inline int ra()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
const int S=,T=;
int n,m,cnt;
int head[],cur[],h[],q[],in[];
int low[];
struct data{int to,next,v;}e[];
void ine(int x, int y, int v)
{
e[++cnt].to=y;
e[cnt].next=head[x];
e[cnt].v=v;
head[x]=cnt;
}
void insert(int x, int y, int v)
{
ine(x,y,v); ine(y,x,);
}
bool bfs()
{
for (int i=; i<=T; i++) h[i]=-;
int l=,r=; q[]=S; h[S]=;
while (l<r)
{
int x=q[l++];
for (int i=head[x];i;i=e[i].next)
if (e[i].v && h[e[i].to]==-)
{
h[e[i].to]=h[x]+;
q[r++]=e[i].to;
}
}
if (h[T]==-) return ;
return ;
}
int dfs(int x, int f)
{
if (x==T) return f;
int w,ww=;
for (int i=head[x];i;i=e[i].next)
if (h[e[i].to]==h[x]+)
{
w=dfs(e[i].to,min(e[i].v,f-ww));
ww+=w; e[i].v-=w; e[i^].v+=w;
if (ww==f) return f;
}
if (!ww) h[x]=-;
return ww;
}
void dinic()
{
while (bfs()) dfs(S,inf);
}
void build()
{
for (int i=; i<=n; i++)
if (in[i]>) insert(S,i,in[i]);
else insert(i,T,-in[i]);
}
bool jud()
{
for (int i=head[S];i;i=e[i].next)
if (e[i].v) return ;
return ;
}
int main()
{
int t=ra();
while (t--)
{
cnt=;
memset(head,,sizeof(head));
memset(in,,sizeof(in));
n=ra(); m=ra();
for (int i=; i<=m; i++)
{
int x=ra(),y=ra(); low[i]=ra(); int w=ra();
in[x]-=low[i]; in[y]+=low[i];
insert(x,y,w-low[i]);
}
build(); dinic();
if (!jud()) cout<<"NO"<<endl;
else{
cout<<"YES"<<endl;
for (int i=; i<=m; i++)
printf("%d\n",e[(i<<)^].v+low[i]);
}
cout<<endl;
}
return ;
}

zoj 2314Reactor Cooling的更多相关文章

  1. zoj Reactor Cooling

    Reactor Cooling 无源汇上下界最大流问题. 1.流量平衡. 2.满足上下界 模板题. #include <iostream> #include <queue> # ...

  2. ZOJ 1314 Reactor Cooling | 上下界无源汇可行流

    ZOJ 1314 Reactor Cooling | 上下界无源汇可行流 题意 有一个网络,每条边有流量的上界和下界,求一种方案,让里面的流可以循环往复地流动起来. 题解 上下界无源汇可行流的模型: ...

  3. zoj 2314 Reactor Cooling 网络流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 The terrorist group leaded by a ...

  4. ZOJ 2314 - Reactor Cooling - [无源汇上下界可行流]

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2314 The terrorist group leaded by ...

  5. zoj 2314 Reactor Cooling (无源汇上下界可行流)

    Reactor Coolinghttp://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1314 Time Limit: 5 Seconds ...

  6. ZOJ 2314 Reactor Cooling

    Reactor Cooling Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Origina ...

  7. ZOJ 2314 Reactor Cooling [无源汇上下界网络流]

    贴个板子 #include <iostream> #include <cstdio> #include <cstring> #include <algorit ...

  8. ZOJ 2314 Reactor Cooling(无源汇有上下界可行流)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2314 题目大意: 给n个点,及m根pipe,每根pipe用来流躺 ...

  9. ZOJ 2314 Reactor Cooling(无源汇上下界网络流)

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2314 题意: 给出每条边流量的上下界,问是否存在可行流,如果存在则输出. ...

随机推荐

  1. jdbc学习一半的代码

    用java连接MySQL的准备工作 1.下载MySQL(了解MySQL的基本语法) 2.下载java的和MySQL的连接 3.在程序中加入2中下载的jar包 写java程序连接数据库的基本步骤: 1. ...

  2. java核心-多线程(6)-线程池-ThreadPoolExecutor

    1.java多线程编程少不了使用线程池,线程池相关的工具类所在jdk包,java.util.concurrent 2.使用示例 demo1 public class ThreadPoolDemo { ...

  3. css 文本溢出省略号

    单行溢出显示省略号: white-space: nowrap; overflow: hidden; text-overflow: ellipsis; 多行溢出显示省略号: text-overflow: ...

  4. docker-compose 快速部署Prometheus,监控docker 容器, 宿主机,ceph -- cluster集群

    话不多说上菜: 现在环境是这样: ceph 4台: 192.168.100.21  ceph-node1 192.168.100.22  ceph-node2 192.168.100.23  ceph ...

  5. 小程序通过web-view实现与h5页面之间的交互

    在小程序端使用web-view内嵌网页,通过 src 携带参数,通过 @message 接收h5传回的数据 <template> <view> <web-view :sr ...

  6. DBlink查看,创建于删除

    1.查看dblink select owner,object_name from dba_objects where object_type='DATABASE LINK'; 或者 select * ...

  7. (转)如何判断VPS是基于哪种虚拟技术?Xen、OpenVZ、Xen HVM、KVM还是VMware

    对于VPS新手来说,怕被无良的奸商给忽悠,下的Xen的却给的OpenVZ的,如何来判断自己买的VPS是那种虚拟技术的,下面VPS侦探整理一些常见的方法. 1.通过系统上的相关目录或文件判断 执行:ls ...

  8. uboot前传

    1.uboot到底是干嘛的 uboot主要作用是用来启动操作系统内核. uboot还要负责部署整个计算机系统. uboot中还有操作Flash等板子上硬盘的驱动. uboot还得提供一个命令行界面供人 ...

  9. 036、Java中三目运算符的使用

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  10. gem5-gpu 运行 PARSEC2.1

    PARSEC是针对共享内存多核处理器(CPU)的一套基准测试程序,详细介绍见wiki:http://wiki.cs.princeton.edu/index.php/PARSEC,主要参考:http:/ ...