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

【题解】上下界

题解参考:[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. C++ Primer Plus学习:第十三章

    第十三章 类继承 继承的基本概念 类继承是指从已有的类派生出新的类.例: 表 0-1 player.h class player { private: string firstname; string ...

  2. TCP系列51—拥塞控制—14、TLP、ER与拥塞控制

    一.概述 这里的重点是介绍TLP.ER与拥塞控制并不是介绍TLP和ER本身,因此TLP和ER的详细内容请翻前文. 在TLP与拥塞控制的交互中有几个点需要注意 1.TLP触发的重传后,TCP仍然处于Op ...

  3. Jmeter 快速入门--简单的http压测

    1.添加线程组 打开jmeter主窗口后,选择左侧树形结构里的"测试计划",然后右键选择添加,选择"threads(users)",选择"线程组&qu ...

  4. 【Linux】- 对find,xargs,grep和管道的一些理解

    问题 相信大家都知道在目录中搜索含有固定字符串文件的命令: find . -name '*.py' |xargs grep test 刚开始的时候,我不熟悉xargs命令,所以直接使用的命令是: fi ...

  5. html5兼容

    You can download the latest version of HTML5shiv from github or reference the CDN version at https:/ ...

  6. TP中CURD操作

    CURD操作 CURD操作也就是模型操作数据表的基本操作.C(Create).U(Update).R(Read).D(Delete)操作就是增删改查操作. 6.1.增加操作 回想一下在mysql中增加 ...

  7. 服务器控件的异步请求——UpdatePanel和ScriptManager

    aspx文件里面有以下一段代码 <body> <form id="form1" runat="server"> <div> ...

  8. MVC 中创建自己的异常处理

    1.新建类一个类继承 HandleErrorAttribute 类把异常书写到队列中 public class MyExceptionAttribute: HandleErrorAttribute { ...

  9. VBA-从周课表统计节次

    Sub datainsert() Dim r1 As Integer, r2 As Integer, i As Integer, j As Integer, findrow As Integer, f ...

  10. BZOJ 1853 幸运数字(容斥原理+dfs)

    题意:求闭区间内能被6和8组成的数字整除的数目.n<=1e11. 我们可以预处理出这些6和8组成的数字,大概2500个,然后排除一些如88,66的情况.这样大概还剩下1000个. 转化为[0,r ...