bzoj 2406 矩阵——有源汇上下界可行流
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406
二分答案。把 b 的 n 个行作为一排, m 个列作为一排,每行和每列之间连上下界为 L , R 的边,源点向每行连以 “ a 的该行的值的和” 加/减 mid 为上下界的边,每列向汇点连以 “ a 的该列的值的和” 加/减 mid 为上下界的边;然后跑可行流就行了。
自己把和超级源点及超级汇点的无关的边先连好了,到时候改一改容量就行了。但别忘了把 hd[ ] , cap[ ] , xnt , tp[ ] 都赋回原来的值。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=205,M=N*N<<1,INF=4e7+5; int n,m,yhd[N<<1],hd[N<<1],xnt=1,cur[N<<1],bj,to[M],nxt[M],ycap[M],cap[M],dy[N<<1]; int sh[N],sl[N],s,t,ss,tt,tp[N<<1],ttp[N<<1]; int dfn[N<<1],q[N<<1],he,tl; int Mn(int a,int b){return a<b?a:b;} int Mx(int a,int b){return a>b?a:b;} int rdn() {int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret; } void add(int x,int y,int z) {to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;cap[xnt]=z;to[++xnt]=x;nxt[xnt]=hd[y];hd[y]=xnt;cap[xnt]=0; } bool bfs(int mid) {memset(dfn,0,sizeof dfn);dfn[ss]=1;q[he=tl=1]=ss;while(he<=tl){int k=q[he++];for(int i=hd[k],v;i;i=nxt[i])if(!dfn[v=to[i]]&&cap[i])dfn[v]=dfn[k]+1,q[++tl]=v;}return dfn[tt]; } int dinic(int cr,int flow) {if(cr==tt)return flow;int use=0;for(int& i=cur[cr],v;i;i=nxt[i])if(dfn[v=to[i]]==dfn[cr]+1&&cap[i]){int tmp=dinic(v,Mn(flow-use,cap[i]));if(!tmp)dfn[v]=0;use+=tmp;cap[i]-=tmp;cap[i^1]+=tmp;if(use==flow)return use;}return use; } bool chk(int mid) {xnt=bj;memcpy(ttp,tp,sizeof tp);memcpy(hd,yhd,sizeof yhd);// for(int i=2;i<=bj;i++)cap[i]=ycap[i];/// for(int i=1;i<=n;i++){int l=Mx(sh[i]-mid,0),r=sh[i]+mid;cap[dy[i]]=r-l;cap[dy[i]^1]=0;ttp[i]+=l;ttp[s]-=l;}for(int i=1;i<=m;i++){int l=Mx(sl[i]-mid,0),r=sl[i]+mid;cap[dy[i+n]]=r-l;cap[dy[i+n]^1]=0;ttp[i+n]-=l;ttp[t]+=l;}int val=0;for(int i=0;i<=t;i++)if(ttp[i]>0)add(ss,i,ttp[i]),val+=ttp[i];else if(ttp[i]<0)add(i,tt,-ttp[i]);while(bfs(mid))memcpy(cur,hd,sizeof hd),val-=dinic(ss,INF);return !val; } int main() {n=rdn();m=rdn();for(int i=1,d;i<=n;i++)for(int j=1;j<=m;j++)d=rdn(),sh[i]+=d,sl[j]+=d;int L=rdn(),R=rdn();s=0;t=n+m+1; ss=n+m+2;tt=n+m+3;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)add(i,j+n,R-L),tp[i]-=L,tp[j+n]+=L;add(t,s,INF);for(int i=1;i<=n;i++)add(s,i,0),dy[i]=xnt-1;for(int i=n+1,j=n+m;i<=j;i++)add(i,t,0),dy[i]=xnt-1;bj=xnt;memcpy(yhd,hd,sizeof hd);for(int i=2;i<=bj;i++)ycap[i]=cap[i];int l=0,r=2e5+5,ans;while(l<=r){int mid=l+r>>1;if(chk(mid))ans=mid,r=mid-1;else l=mid+1;}printf("%d\n",ans);return 0; }
转载于:https://www.cnblogs.com/Narh/p/10122036.html
bzoj 2406 矩阵——有源汇上下界可行流相关推荐
- Shoot the Bullet(ZOJ3229)(有源汇上下界最大流)
描述 ensokyo is a world which exists quietly beside ours, separated by a mystical border. It is a utop ...
- 【ACWing】2188. 无源汇上下界可行流
题目地址: https://www.acwing.com/problem/content/2190/ 给定一个包含nnn个点mmm条边的有向图,每条边都有一个流量下界和流量上界.求一种可行方案使得在所 ...
- 3698: XWW的难题 有源汇上下界最大流
有源汇上下界最大流,行列建图,下界为ai,ja_{i,j},上界为ai,j+1a_{i,j}+1,跑的飞起. 不要忘记判断上取整下取整相同的情况. #include<iostream> # ...
- BZOJ.3698.XWW的难题(有源汇上下界最大流ISAP)
题目链接 按套路行列作为两部分,连边 \(S->row->column->T\). S向代表行的元素连边cap(A[i][n])(容量上下界为上下取整),代表列的元素向T连边cap( ...
- 【bzoj2406】矩阵 二分+有上下界可行流
题目描述 输入 第一行两个数n.m,表示矩阵的大小. 接下来n行,每行m列,描述矩阵A. 最后一行两个数L,R. 输出 第一行,输出最小的答案: 样例输入 2 2 0 1 2 1 0 1 样例输出 1 ...
- BZOJ 3698: XWW的难题(有源汇上下界最大流)
题面 XWW是个影响力很大的人,他有很多的追随者.这些追随者都想要加入XWW教成为XWW的教徒.但是这并不容易,需要通过XWW的考核. XWW给你出了这么一个难题:XWW给你一个N*N的正实数矩阵A, ...
- 有上下界网络流 ---- Zoj3229 Shoot the Bullet|东方文花帖|【模板】有源汇上下界最大流
学习资料+题目链接 题目大意: 模板讲解 #include <bits/stdc++.h> #define mid ((l + r) >> 1) #define Lson rt ...
- [BZOJ3698]XWW的难题(有源汇上下界最大流+讲解)
题目: 我是超链接 题解: 建图的话和有源汇可行流一样 求解方法: 在新图上跑ss到tt的最大流(附加源汇) 若新图满流,那么一定存在一种可行流 记此时∑f(s,i)=sum1∑f(s,i)=sum1 ...
- HDU 3157 Crazy Circuits(有源汇上下界最小流)
HDU 3157 Crazy Circuits 题目链接 题意:一个电路板,上面有N个接线柱(标号1~N),还有两个电源接线柱 + -.给出一些线路,每一个线路有一个下限值求一个能够让全部部件正常工作 ...
最新文章
- python版mapreduce题目实现寻找共同好友
- Ultraedit 26.1安装教程
- java事件大全_Java sctipt常用事件汇总介绍
- display: inline-block;水平居中
- Plugin 框架 开发实录
- mysql+keepalived实现双主自由切换
- XenServer部署系列之05——虚拟机的创建及复制
- 介绍一篇路端传感器的cooperative perception(3D目标检测)论文
- 128道软件测试面试题,面试及答案,视频讲解
- 干货丨网站域名后缀都是什么含义?
- 手机拍证件照有什么诀窍
- 用Python分析周杰伦歌曲并进行数据可视化
- 计算机教师结构化方式面试,“中学信息技术学科”题目如何答?教师资格结构化面试...
- mongodb中文件导入报错error inserting documents解决方法
- 2016即将结束,你的目标实现了吗?
- 高中毕业礼物送什么比较好?第一名的礼物你绝对想不到
- C语言宏定义函数中的“_##”的意思
- QImage与Qpixmap的区别
- C语言 | 求a+aa+...+aa..a的值
- 北京英克赋能医药新零售:“全渠道”运营如何打破边界?