传送门: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. [转]Android UI 自动化测试

    介绍 Android测试支持库包含UI自动化模块,它可以对Android应用进行自动黑盒测试.在API Level 18中引入了自动化模块,它允许开发者在组成应用UI的控件上模仿用户行为. 在这个教程 ...

  2. ASP.NET Web API 2 返回 Json格式

    最近在学习ASP.NET的Web API,刚刚开始以为会有些复杂,结果却非常简单. 学习的地址:http://www.asp.net/web-api/overview/getting-started- ...

  3. Thymeleaf 使用时的标签

    1 . onclick事件   <a th:onclick="'javascript:more()'" ></a> 2.引入CSS样式 <link t ...

  4. 使用CodeBlocks编译64位程序(用的编译器仅仅是windows sdk的)

    需求: -CodeBlocks使用nightly版本: -Windows SDK(我使用的是6.0A,即微软针对vista的,因为这个比较小,你也可以选择其他版本但是要有64位编译器.他也适用于xps ...

  5. React错误总结解决方案(二)

    1.React native: Cannot add a child that doesn't have a YogaNode or parent node 该错误一般是因为render方法中注释语句 ...

  6. BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)

    题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...

  7. STL 六大部件

    stl具有上面6大部件 容器是存储数据的,原理主要是模板,容器只是负责存储数据,并不关心内存的存储情况,所以出现了分配器,分配器主要是负责为容器分配内存的,对于数据的操作被封装为一个个函数,也就是算法 ...

  8. http短连接大量time wait解决方案

    tcp连接是网络编程中最基础的概念,基于不同的使用场景,我们一般区分为“长连接”和“短连接”,长短连接的优点和缺点这里就不详细展开了,有心的同学直接去google查询,本文主要关注如何解决tcp短连接 ...

  9. fetch_array()与fetch_assoc()的用法

    fetch_array()与fetch_assoc()用起来没有什么大的差别,主要是怎么用?fetch_array()如果单独作为while的条件,则能够取出结果集中的所有结果.如果单独作用于结果集, ...

  10. [OS] 进程相关知识点

    进程概念: 1.程序在执行中 2.一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程,是系统进行资源分配和调度的独立单位. 进程与程序的差别: ·进程----动态, 程序----静态 ·进程 ...