传送门: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. Python的异常

    一.异常的常用形式 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Pyth ...

  2. axios应用

    Skip to content     Features Business Explore Marketplace Pricing Sign in or Sign up     Watch929 St ...

  3. RTSC和XDCTool的理解

    1. 在使用TI的开发工具CCS中,里面有几个重要的概念,一直不太清晰,RTSC是什么,XDCTool是什么?包是什么?包的版本为啥都是4位的(比如mathlib_c66x_3_0_1_1)?star ...

  4. C++学习003-#define 自定义宏

    C++中可以用#define来定义自定义的宏 也可以用使用#define来定义常量 但是#define只是简单的替换,在定义常量的时候没有语法检测 所以在C++定义常量可以使用  Const修饰 #d ...

  5. 输出1-n的全排(递归C++)

    [问题描述] 输出1到n之间所有不重复的排列,即1到n的全排,要求所产生的任一数列不含有重复的数字. [代码展示] #include<iostream>using namespace st ...

  6. Julia 学习笔记(一):数组

    个人向,只会记录一些需要注意的点. 前言 学习 Julia 已经有一段时间了,但是进步缓慢.这一方面是最近代码写得少,一方面是 Julia 学习资料少.中文资料更少,但也有我没做笔记的缘故导致学习效率 ...

  7. Caused by: redis.clients.jedis.exceptions.JedisDataException: WRONGTYPE Operation against a key holding the wrong kind of value

    对错误类型key的操作,也就是说redis中没有你当前操作的这个key,而你用这个key去执行某些操作!检查key是否正确

  8. Friends and Enemies(思维)

    Friends and Enemies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  9. capacilitys docker中的权限设置 privileged

    capacilities是docker 中对docker权限设置的重要方面: http://blog.csdn.net/wangpengqi/article/details/9821227 上面这篇文 ...

  10. [洛谷P2626]斐波那契数列(升级版)

    题目大意:请你求出第$n$个斐波那契数列的数$mod 2^{31}$之后的值.并把它分解质因数. 题解:乱搞 卡点:1.忘记取模 C++ Code: #include<cstdio> #i ...