解析

如果没有元素均要在 [0,1e6][0,1e6][0,1e6] 的条件,可以很容易的构造出一个合法解。

那么我们就要通过调整得到的解,使所有数都在合法范围内。
注意到,每次给某一行/列依次+1,-1,+1,-1…这样仍然符合要求。
让每一行/列错开,就能变成:

row:
+-+-+
-+-+-
+-+-+
-+-+-column:
-+-+-
+-+-+
-+-+-
+-+-+

这样每个格子行贡献和列贡献的符号就都是相反的,然后就可以差分约束了。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
using namespace std;const int N=650;
const int M=50050;
const int mod=1e9+7;
const double eps=1e-9;inline ll read() {ll x(0),f(1);char c=getchar();while(!isdigit(c)) {if(c=='-')f=-1;c=getchar();}while(isdigit(c)) {x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}int n,m;
int a[N][N],b[N][N],c[N],d[N],tot;
ll dis[N];
int o=1e6;
queue<int>q;
bool vis[N];
int tim[N];
struct node{int to,nxt,w;
}p[N*N*2];
int fi[N],cnt;
inline void addline(int x,int y,int w){p[++cnt]=(node){y,fi[x],w};fi[x]=cnt;
}
bool spfa(){memset(dis,0,sizeof(dis));memset(tim,0,sizeof(tim));for(int i=1;i<=tot;i++) q.push(i),vis[i]=1;while(!q.empty()){int now=q.front();q.pop();vis[now]=0;for(int i=fi[now];~i;i=p[i].nxt){int to=p[i].to;if(dis[to]<dis[now]+p[i].w){dis[to]=dis[now]+p[i].w;tim[to]++;if(!vis[to]){vis[to]=1;q.push(to);}if(tim[to]>tot) return false;}}}return true;
}
void work(){memset(a,0,sizeof(a));tot=0;memset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();for(int i=1;i<n;i++){for(int j=1;j<m;j++) b[i][j]=read();}for(int i=n-1;i>=1;i--){for(int j=m-1;j>=1;j--) a[i][j]=b[i][j]-a[i+1][j+1]-a[i+1][j]-a[i][j+1];}//for(int i=1;i<=n;i++){//for(int j=1;j<=m;j++) printf("%d ",a[i][j]);//puts("");//}for(int i=1;i<=n;i++) c[i]=++tot;for(int j=1;j<=m;j++) d[j]=++tot;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if((i+j)&1){addline(c[i],d[j],a[i][j]-o);addline(d[j],c[i],-a[i][j]);}else{             addline(c[i],d[j],-a[i][j]);addline(d[j],c[i],a[i][j]-o);}}}//for(int i=1;i<=tot;i++)//  for(int j=1;j<=tot;j++) printf("%d -> %d w=%d\n",i,j,e[i][j]);if(!spfa()){puts("NO");return;}puts("YES");for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){ll add=dis[c[i]]-dis[d[j]];if((i+j)&1) a[i][j]+=add;else a[i][j]-=add;printf("%d ",a[i][j]);}puts("");}
}
int main() {#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout);
#endifint T=read();while(T--) work();return 0;
}
/*
1
3 3
1000000 2000000
0 0
*/

洛谷P7515:矩阵游戏(差分约束)相关推荐

  1. 洛谷 P1129 矩阵游戏

    洛谷 P1129 矩阵游戏 题目链接 题目描述 小 Q 是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏――矩阵游戏.矩阵游戏在一个 n×n 黑白方阵进行(如同国际象棋一般,只是颜色是 ...

  2. 【题解】洛谷P3084 照片(差分约束)

    https://www.luogu.org/blog/user9643/solution-p3084 注意用优先队列..还有判断负环

  3. 洛谷 P2197 nim游戏

    洛谷 P2197 nim游戏 题目描述 甲,乙两个人玩Nim取石子游戏. nim游戏的规则是这样的:地上有n堆石子(每堆石子数量小于10000),每人每次可从任意一堆石子里取出任意多枚石子扔掉,可以取 ...

  4. 【BZOJ4500】矩阵(差分约束)

    [BZOJ4500]矩阵(差分约束) 题面 BZOJ 然而权限题 题解 显然拆分行和列.不妨设这一行/列总共加减的值是\(p\),那么每一个限制就是两个数的和为一个特定的数.这样子不好做,反正是一个二 ...

  5. 洛谷 P1558 色板游戏

    传送门:洛谷 P1558 色板游戏 算法分析:观察到数据范围:\(1\leq T\leq 30\) ,考虑使用二进制来进行状态压缩 将颜色\(x\)表示为 \(1<<(x-1)\) 即 \ ...

  6. 洛谷 P3041 视频游戏的连击Video Game Combos(AC自动机+拓扑排序+数位DP)

    洛谷 P3041 视频游戏的连击Video Game Combos 难度一般,不过这个数位DP其实应该叫做记忆化搜索 题意:玩游戏时可以通过按键组合打出combo技能:然后是已知N个combo的按键方 ...

  7. 洛谷P1722 矩阵Ⅱ (卡塔兰数)

    洛谷P1722 矩阵Ⅱ 卡塔兰数 题面 思路 代码 题面 给定一个1*(2n)的矩阵.现让你放入一样多的红色算筹和黑色算筹,使对于所有的i(1<=i<=2n),使第1~i格中红色算筹个数大 ...

  8. 动态规划——洛谷_P1057传球游戏

    题目: 题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏.游戏规则是这样的:n个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球, ...

  9. 洛谷——P1000 超级玛丽游戏

    P1000 超级玛丽游戏 题目背景 本题是洛谷的试机题目,可以帮助了解洛谷的使用. 建议完成本题目后继续尝试P1001.P1008. 另外强烈推荐新用户必读贴 题目描述 超级玛丽是一个非常经典的游戏. ...

最新文章

  1. 全检体系结构风格浅谈
  2. 浅析精准网络推广的基础内容
  3. python编程在哪里写-Python自带的IDE在哪里
  4. 产品经理在工作中如何进行沟通
  5. Spring事务传播
  6. saltstack 自动化运维管理
  7. 关于提高代码复用性的几个知识点的回顾
  8. Spring框架概述(快速入门)
  9. 海阔凭鲲跃 天高任鹏飞——从一场大赛看华为云的鲲鹏之“智”
  10. 这款折纸机器人玩具,可以帮助孩子学习编程和Robot知识
  11. Golang优化之内存对齐
  12. 4.计蒜客ACM题库.A1947 An Olympian Math Problem
  13. 导致企业5S管理失败的八大根源
  14. 【Python百日基础系列】Day73 - dash实例:系统发育树
  15. 固态硬盘误格式化恢复图文教程
  16. Cocos2dx基础手册
  17. vs2017下配置Xamarin
  18. Activity全屏透明动画等
  19. AMBA总线协议之AHB学习记录(1)—ahb_bus(附verilog代码)
  20. 车道线检测方法的一些近期论文

热门文章

  1. mysql普通标转分区表_MySQL分区表到普通表互转
  2. linux nginx mysql php 5.5._搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
  3. oracle中文加密算法,Oracle数据库替代加密算法
  4. php中添加一个链接,使用php在推文中链接一个标签
  5. php调用另一个php文件里的变量的值,thinkphp中一个方法调用另一个步骤的变量
  6. mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?
  7. 阅读Java_如何阅读 Java 开源代码?
  8. css规则中区块block,CSS的命名方式:BEM(区块、元素、修饰符)
  9. linux 修改默认脚本,linux环境初始脚本
  10. 墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...