传送门:https://jzoj.net/senior/#main/show/2701

【题目大意】

给出矩阵A,求矩阵B,使得

aaarticlea/png;base64,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" alt="" width="240" height="124" />

最小,矩阵B每个元素在[L,R]内

n<=200,1<=Aij,L,R<=1000, L<=R

【题解】

我们二分答案x,然后对行列建点,每行向每列连[L,R]的边,然后S向每行连[max(S[i]-x), S[i]+x]的边,每列向T连[max(T[i]-x), T[i]+x]的边,判断是否有可行流即可。

其中S[i]表示A中第i行的和,T[i]表示A中第i列的和。

判断有源汇上下界可行流:按照无源汇那样建边,多来一条(T->S,[0,inf])即可。

然后跑dinic,判断从SS流出的边是否全流满。

# include <queue>
# include <stdio.h>
# include <string.h>
# include <iostream>
# include <algorithm>
// # include <bits/stdc++.h> using namespace std; typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
const int M = + , N = 5e5 + , inf = 1e9;
const int mod = 1e9+; # define RG register
# define ST static int n, m, a[M][M], s1[M], s2[M], S, T, L, R;
int head[M * ], nxt[N], to[N], flow[N], tot, indeg[M * ];
inline void add(int u, int v, int fl) {
++tot; nxt[tot] = head[u]; head[u] = tot;
to[tot] = v; flow[tot] = fl;
}
inline void adde(int u, int v, int fl) {
add(u, v, fl), add(v, u, );
} inline void tadd(int u, int v, int lf, int rf) {
adde(u, v, rf-lf);
indeg[v] += lf;
indeg[u] -= lf;
} namespace MF {
queue<int> q; int c[M * ], cur[M * ];
inline bool bfs() {
for (int i=; i<=n+m+; ++i) c[i] = -;
while(!q.empty()) q.pop();
q.push(S); c[S] = ;
while(!q.empty()) {
int top = q.front(); q.pop();
for (int i=head[top]; i; i=nxt[i]) {
if(c[to[i]] != - || flow[i] == ) continue;
c[to[i]] = c[top] + ;
q.push(to[i]);
if(to[i] == T) return ;
}
}
return ;
} inline int dfs(int x, int low) {
if(x == T) return low;
int r = low, fl;
for (int i=cur[x]; i; i=nxt[i]) {
if(c[to[i]] != c[x]+ || flow[i] == ) continue;
fl = dfs(to[i], min(r, flow[i]));
flow[i] -= fl; flow[i^] += fl; r -= fl;
if(flow[i] > ) cur[x] = i;
if(!r) return low;
}
if(r == low) c[x] = -;
return low-r;
} inline int main() {
int ans = ;
while(bfs()) {
for (int i=; i<=n+m+; ++i) cur[i] = head[i];
ans += dfs(S, inf);
}
return ans;
}
} # define line(x) (x)
# define row(x) (x+n) inline void build(int x) {
int SS = n+m+, TT = n+m+;
S = n+m+, T = n+m+;
for (int i=; i<=n+m+; ++i) indeg[i] = ;
for (int i=; i<=n; ++i)
for (int j=; j<=m; ++j)
tadd(line(i), row(j), L, R);
for (int i=; i<=n; ++i)
tadd(SS, line(i), max(, s1[i]-x), s1[i]+x);
for (int i=; i<=m; ++i)
tadd(row(i), TT, max(, s2[i]-x), s2[i]+x);
tadd(TT, SS, , inf);
for (int i=; i<=n+m+; ++i) {
if(indeg[i] < ) adde(i, T, -indeg[i]);
else adde(S, i, indeg[i]);
}
} inline bool chk(int x) {
tot = ; memset(head, , sizeof head);
build(x);
MF::main();
// cout << x << endl;
for (int i=head[S]; i; i=nxt[i]) {
// cout << flow[i] << ' ';
if(flow[i] != ) {
// cout << endl;
return false;
}
}
// cout << endl;
return true;
} inline void gans(int ans) {
for (int i=; i<=n; ++i, puts("")) {
for (int j=; j<=m; ++j) {
for (int p=head[line(i)]; p; p=nxt[p]) {
if(to[p] == row(j)) {
printf("%d ", flow[p^] + L);
break;
}
}
}
}
} int main() {
freopen("mat.in", "r", stdin);
freopen("mat.out", "w", stdout);
cin >> n >> m;
for (int i=; i<=n; ++i)
for (int j=; j<=m; ++j) {
scanf("%d", &a[i][j]);
s1[i] += a[i][j];
s2[j] += a[i][j];
}
cin >> L >> R;
int l = , r = 2e5, mid, ans = ;
while() {
if(r-l <= ) {
for (int i=l; i<=r; ++i)
if(chk(i)) {
ans = i;
break;
}
break;
}
mid = l+r>>;
if(chk(mid)) r = mid;
else l = mid;
}
cout << ans << endl;
gans(ans);
return ;
}

jzoj2701 【GDKOI2012模拟02.01】矩阵的更多相关文章

  1. jzoj2700 【GDKOI2012模拟02.01】数字

    传送门:https://jzoj.net/senior/#main/show/2700 [题目大意] 令n为正整数,S(n)为n的各位数字之和,令

  2. [JZOJ2702] 【GDKOI2012模拟02.01】探险

    题目 题目大意 给你一个每条边正反权值不一定相同的无向图,求起点为111点的最小环. 思考历程 一看到这题,就觉得是一个经典模型. 然后思考先前做过最小环的经历,发现没个卵用. 我突然想到,既然这一个 ...

  3. http://www.cnblogs.com/draem0507/archive/2013/02/01/2889317.html

    http://www.cnblogs.com/draem0507/archive/2013/02/01/2889317.html

  4. oracle问题 《经由直接路径由 EXPORT:V10.02.01 创建的导出文件 IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件》

    问题:  经由直接路径由 EXPORT:V10.02.01 创建的导出文件 : 只有 DBA 才能导入由其他 DBA 导出的文件 解决方法:用sys 登录,给当前用户授权,授权语句:grant dba ...

  5. 2016.02.01日,UdoOS系统项目正式开通了

    2016.02.01日,UdoOS系统项目正式开通了,源代码即将开放 Copyright (c) 2016

  6. [EOJ Monthly 2018.10][C. 痛苦的 01 矩阵]

    题目链接:C. 痛苦的 01 矩阵 题目大意:原题说的很清楚了,不需要简化_(:з」∠)_ 题解:设\(r_i\)为第\(i\)行中0的个数,\(c_j\)为第\(j\)列中0的个数,\(f_{i,j ...

  7. 02.02.01 第1章 简介及基础操作(Power BI商业智能分析)

    02.02.01.01 powerbi简介 00:10:59 02.02.01.02 query数据导入 00:03:26 具体操作实例如下: 02.02.01.03导入access数据 00:05: ...

  8. http://www.cnblogs.com/langtianya/archive/2013/02/01/2889682.html

    http://www.cnblogs.com/langtianya/archive/2013/02/01/2889682.html

  9. Leetcode 542.01矩阵

    01矩阵 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的距离. 两个相邻元素间的距离为 1 . 示例 1: 输入: 0 0 0 0 1 0 0 0 0 输出: 0 0 0 0 1 0 ...

随机推荐

  1. OrCAD创建原理图符号图

    1. 首先创建一个库 2. 右键新创建的库,添加新的器件New Part 3. 修改器件属性 4. 添加引脚 添加完引脚之后如图,其中双击引脚,即可修改引脚名字和序号 5. 添加符号的外形 添加完外形 ...

  2. .NET基础知识之七——索引器

           索引器是什么?有什么作用?索引器允许类的实例以访问数组的形式来访问对象里面的属性.如我们经常可以看到类似于dr["name"]="test",或者 ...

  3. 「日常训练」 Soldier and Cards (CFR304D2C)

    题意 (Codeforces 546C) 按照指定的规则打牌,问谁胜或无穷尽. 分析 又是一条模拟,用set+queue(这里手写了)处理即可.注意到两种局势"1 234"和&qu ...

  4. python正则-字符串处理,主要用于处理请求参数格式为application/x-www-form-urlencoded的表单数据

    #当提交的表单数据格式为application/x-www-form-urlencoded,直接从浏览器复制出来的格式是str_lin(chrome,也是最常见的)或者str_in2(火狐)这两种格式 ...

  5. 第十篇 Python的字符串格式化

    字符串格式化:就是按照你的意愿做一个拼接的过程. 1. 字符串格式化的第一种方式:百分号方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. %[ ...

  6. Python|花了一天,为大家整理的一套来自外国大佬的密码速查表

    简单的HTTPS服务器 检查证书信息 输出 生成自签名证书 输出 准备一个签名注册请求 输出 生成无密码的RSA秘钥文件 用一个私钥给文件签名 输出 从签名验证一个文件 输出 通过pem文件做RSA加 ...

  7. Python中send()和sendall()的区别

    Python中send()和sendall()的区别 估计每个学习Python网络编程的人,都会遇到过这样的问题: send()和sendall()到底有什么区别? send()和sendall()原 ...

  8. const char and static const char

    部分内容摘自:https://blog.csdn.net/ranhui_xia/article/details/32696669 The version with const char * will ...

  9. 主外键多表查询demo

    https://www.cnblogs.com/DragonFire/p/6949767.html mySQL练习-主外键多表查询 MySQL练习-主外键多表查询 练习: 1.建立表关系: 请创建如下 ...

  10. HDU 1693 Eat the Trees(插头DP,入门题)

    Problem Description Most of us know that in the game called DotA(Defense of the Ancient), Pudge is a ...