【算法】二分+有源汇上下界可行流

【题解】上下界

题解参考:[BZOJ2406]矩阵(二分+有源汇有上下界的可行流)

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f,maxn=;
int n,first[maxn],q[],cur[maxn],in[maxn],S,T,s,t,tot=,d[maxn],Aline[maxn],Alie[maxn],m,L,R;
struct edge{int from,v,flow;}e[];
void insert(int u,int v,int flow)
{tot++;e[tot].v=v;e[tot].flow=flow;e[tot].from=first[u];first[u]=tot;
tot++;e[tot].v=u;e[tot].flow=;e[tot].from=first[v];first[v]=tot;}
bool bfs()
{
memset(d,-,sizeof(d));
int head=,tail=;q[]=S,d[S]=;
while(head<tail)
{
int x=q[head++];if(head>)head=;
for(int i=first[x];i;i=e[i].from)
if(e[i].flow&&d[e[i].v]==-)
{
d[e[i].v]=d[x]+;
q[tail++]=e[i].v;if(tail>)tail=;
}
}
return d[T]!=-;
}
int dinic(int x,int a)
{
if(x==T||a==)return a;
int flow=,f;
for(int& i=cur[x];i;i=e[i].from)
if(e[i].flow&&d[e[i].v]==d[x]+&&(f=dinic(e[i].v,min(a,e[i].flow)))>)
{
e[i].flow-=f;
e[i^].flow+=f;//不要写反了
a-=f;
flow+=f;
if(a==)break;
}
return flow;
}
bool work(int x)
{
tot=;
memset(first,,sizeof(first));
memset(in,,sizeof(in));
S=,T=;
for(int i=;i<=n;i++)
{
insert(s,i,*x);
in[s]-=Aline[i]-x;
in[i]+=Aline[i]-x;
}
for(int i=;i<=m;i++)
{
insert(i+,t,*x);
in[i+]-=Alie[i]-x;
in[t]+=Alie[i]-x;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
insert(i,j+,R-L);
in[i]-=L;in[j+]+=L;
}
}
insert(t,s,inf);
int Sout=;
for(int i=s;i<=t;i++)
{
if(in[i]>)insert(S,i,in[i]),Sout+=in[i];
if(in[i]<)insert(i,T,-in[i]);
}
int ans=;
while(bfs())
{
for(int i=s;i<=T;i++)cur[i]=first[i];
ans+=dinic(S,inf);
}
if(ans==Sout)return ;
return ;
}
int main()
{
scanf("%d%d",&n,&m);
s=,t=;
for(int i=;i<=n;i++)
{
int v=;
for(int j=;j<=m;j++)
{
int u;
scanf("%d",&u);
Alie[j]+=u;v+=u;
}
Aline[i]=v;
}
scanf("%d%d",&L,&R);
int l=,r=;
while(l<r)
{
int mid=(l+r)>>;
if(work(mid))r=mid;
else l=mid+;
}
printf("%d",l);
return ;
}

【BZOJ】2406 矩阵的更多相关文章

  1. bzoj 2406: 矩阵 上下界网络流判定

    2406: 矩阵 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 138  Solved: 46[Submit][Status][Discuss] De ...

  2. BZOJ 2406: 矩阵 [上下界网络流 二分答案]

    2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...

  3. bzoj 2406: 矩阵 ——solution

    对于100%的数据满足N,M<=200,0<=L<=R<=1000,0<=Aij<=1000 http://www.lydsy.com/JudgeOnline/pr ...

  4. bzoj 2406 矩阵——有源汇上下界可行流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406 二分答案.把 b 的 n 个行作为一排, m 个列作为一排,每行和每列之间连上下界为 ...

  5. bzoj 2406 矩阵 —— 有源汇上下界可行流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2406 这题,首先把题目那个式子的绝对值拆成两个限制,就成了网络流的上下界: 有上下界可行流原 ...

  6. bzoj 2406: 矩阵【二分+有源汇上下界可行流】

    最大值最小,所以考虑二分 |Σaij-Σbij|<=mid,所以Σbij的上下界就是(Σaij-mid,Σaij+mid) 考虑建有上下界网络,连接(s,i,Σaik-mid,Σaik+mid) ...

  7. BZOJ 2406 矩阵(二分+有源汇上下界可行流)

    题意 题解 二分答案+可行流判断. 模板题. CODE #include <cstdio> #include <cstring> #include <algorithm& ...

  8. BZOJ 2406 LuoguP4194 矩阵 有上下界可行流

    分析: 这道题乍一看……卧槽这都什么玩意…… 然后发现给了个A矩阵,要求一个可行的B矩阵,使得矩阵C=A-B的每一行的和的绝对值和每一列的和的绝对值的最大值最小…… 好拗口啊…… 什么最大值最小之类的 ...

  9. [BZOJ 2738] 矩阵乘法 【分块】

    题目链接:BZOJ - 2738 题目分析 题目名称 “矩阵乘法” 与题目内容没有任何关系..就像VFK的 A+B Problem 一样.. 题目大意是给定一个矩阵,有许多询问,每次询问一个子矩阵中的 ...

随机推荐

  1. android入门 — Activity生命周期

    Activity总共有7个回调方法,代表着不同的生命周期的环节. 1.onCreate() 在活动第一次被创建的时候调用.在这个方法中需要完成活动的初始化操作,比如说加载布局.绑定事件等. 2.onS ...

  2. MUI设置卡头卡位的形式进行切换

    这是mui的官方帮助文档,一切问题都能在这里找到http://dev.dcloud.net.cn/mui/ui/解决方案. 下面是MUI官方对卡头卡尾的一些描述: 在mobile app开发过程中,经 ...

  3. 敏捷开发之Scrum站立会议

    Scrum是迭代式增量软件开发过程,通常用于敏捷开发.站立会议通常指Scrun方法中的每日站立会议.顾名思义,是每天以站姿的方式召开的会议.以下从功能及要点方面对其进行解释说明: 功能:     1. ...

  4. PHP对象的复制

    对象的复制(克隆) $obj1  =  new  A(); $obj1->p1 = 11; $obj2  = $obj1; //值传递 //则,现在有几个对象?——1个对象! 当然: $obj3 ...

  5. 采用FPGA实现UART转SPI

    应用笔记 V1.1 2015/2/10 采用FPGA实现UART转SPI   概述   本文提供了实现UART转SPI的Verilog代码的功能描述.这份笔记将介绍UART和SPI的基本知识,代码设计 ...

  6. BZOJ 2007 海拔(平面图最小割转对偶图最短路)

    首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...

  7. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  8. 再谈获取网站图标Icon

    上一篇文章讨论了一下获取网站图标方法,是通过从根目录直接获取和html解析结合的方式来获取的,并给出了相应的代码示例.这一篇来讨论一个更现成的方法,这个方法是从360导航的页面发现的,在导航页面中点击 ...

  9. Java 读取Excel2007 jar包冲突的问题(org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException)

    1.jar包冲突报错问题 2.使用的jar包,以及重复jar包 3.删除重复jar包

  10. 【入门向】使用 MetaHook Plus 绘制 HUD

    MetaHook Plus 是一个GoldSrc引擎(就是的Half-Life.CS1.6的引擎)的客户端插件平台,它可以加载我们自己开发的DLL插件. 首先你需要安装一个 Visual Studio ...