P7515-[省选联考 2021A卷]矩阵游戏【差分约束】
正题
题目链接:https://www.luogu.com.cn/problem/P7515
题目大意
有一个\(n*m\)的矩形\(A\),然后给出一个\((n-1)*(m-1)\)的矩形\(B\)满足
\]
求能否构造合法矩形\(A\)使得\(0\leq a_{i,j}\leq 10^6\)
\(1\leq T\leq 10,1\leq n,m\leq 300,0\leq b_{i,j}\leq 4\times 10^6\)
解题思路
如果不考虑\(a_{i,j}\)的限制显然很容易构造一个方案。
然后要考虑怎么调整到满足限制,不难发现我们每行/列进行\(+1/-1/+1/-1...\)操作不会改变\(b\)数组上的值,所以我们设\(c_i\)表示第\(i\)行进行了多少次,第\(j\)行进行了多少次,那么有
\]
如果我们控制使得每个位置的\(c_i\)和\(d_j\)的符号不同那么就可以进行差分约束了。
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=610;
struct node{
ll to,next,w;
}a[N*N];
ll T,n,m,b[N][N],c[N][N];
ll tot,cnt[N],ls[N],f[N];
bool v[N];deque<int> q;
void addl(ll x,ll y,ll w){
a[++tot].to=y;
a[tot].next=ls[x];
ls[x]=tot;a[tot].w=w;
return;
}
bool SPFA(){
memset(f,0x3f,sizeof(f));
memset(cnt,0,sizeof(cnt));
q.push_back(1);v[1]=cnt[1]=1;f[1]=0;
while(!q.empty()){
ll x=q.front();v[x]=0;q.pop_front();
for(ll i=ls[x];i;i=a[i].next){
ll y=a[i].to;
if(f[x]+a[i].w<f[y]){
f[y]=f[x]+a[i].w;
cnt[y]=cnt[x]+1;
if(cnt[y]>=n+m&&a[i].w<0)return 1;
if(!v[y]){
v[y]=1;
if(!q.empty()&&f[y]<f[q.front()])q.push_front(y);
else q.push_back(y);
}
}
}
}
return 0;
}
signed main()
{
scanf("%lld",&T);
while(T--){
memset(ls,0,sizeof(ls));tot=0;
scanf("%lld%lld",&n,&m);
for(ll i=1;i<n;i++)
for(ll j=1;j<m;j++)
scanf("%lld",&b[i][j]);
memset(c,0,sizeof(c));
for(ll i=1;i<=m;i++)c[1][i]=0;
for(ll i=2;i<=n;i++){
c[i][1]=0;
for(ll j=2;j<=m;j++)
c[i][j]=b[i-1][j-1]-c[i-1][j-1]-c[i-1][j]-c[i][j-1];
}
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++){
if((i+j)&1)addl(i,j+n,c[i][j]),addl(j+n,i,1e6-c[i][j]);
else addl(j+n,i,c[i][j]),addl(i,j+n,1e6-c[i][j]);
}
if(!SPFA()){
puts("YES");
for(ll i=1;i<=n;i++,putchar('\n'))
for(ll j=1;j<=m;j++){
if((i+j)&1)c[i][j]=c[i][j]+f[i]-f[j+n];
else c[i][j]=c[i][j]-f[i]+f[j+n];
printf("%lld ",c[i][j]);
}
}
else puts("NO");
}
return 0;
}
P7515-[省选联考 2021A卷]矩阵游戏【差分约束】的更多相关文章
- 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)
题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...
- P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】
正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 \(n\)个点的一张图,每条边有权值,一棵生成树的权值是所有边权和乘上边权的\(gcd\),即 ...
- P7514-[省选联考2021A/B卷]卡牌游戏【贪心】
正题 题目链接:https://www.luogu.com.cn/problem/P7514 题目大意 给出\(n\)个卡牌有\(a_i/b_i\),开始都是\(a_i\)朝上,将不超过\(m\)张卡 ...
- P7518-[省选联考2021A/B卷]宝石【主席树,二分】
正题 题目链接:https://www.luogu.com.cn/problem/P7518 题目大意 给出\(n\)个点的一棵树,每个点上有不大于\(m\)的数字. 然后给出一个长度为\(c\)的各 ...
- P6620-[省选联考2020A卷]组合数问题【组合数学,斯特林数】
正题 题目链接:https://www.luogu.com.cn/problem/P6620 题目大意 给出\(n,x,p,m\)和一个\(m\)次多项式\(f\)求 \[\sum_{k=0}^nf( ...
- [省选联考 2021 A 卷] 矩阵游戏
很巧妙的一个构造. 我是没有想到的. 自己的思维能力可能还是不足. 考虑先满足\(b\)对\(a\)的限制,把\(a\)的第一行和第一列设\(0\),推出这个\(a\). 接下来考虑对这个\(a\), ...
- luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理)
luoguP6624 [省选联考 2020 A 卷] 作业题(莫比乌斯反演,矩阵树定理) Luogu 题外话: Day2一题没切. 我是傻逼. 题解时间 某种意义上说刻在DNA里的柿子,大概是很多人学 ...
- 题解 P6622 [省选联考 2020 A/B 卷] 信号传递
洛谷 P6622 [省选联考 2020 A/B 卷] 信号传递 题解 某次模拟赛的T2,考场上懒得想正解 (其实是不会QAQ), 打了个暴力就骗了\(30pts\) 就火速溜了,参考了一下某位强者的题 ...
- [省选联考 2020 A 卷] 组合数问题
题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...
随机推荐
- jpa中遇到关键字
@Column(name = "`rank`") 或者 @Column(name = "\"use\"")
- 经典树与图论(最小生成树、哈夫曼树、最短路径问题---Dijkstra算法)
参考网址: https://www.jianshu.com/p/cb5af6b5096d 算法导论--最小生成树 最小生成树:在连通网的所有生成树中,所有边的代价和最小的生成树,称为最小生成树. im ...
- vue 实现 leaflet的测绘,测距,测面
参考1:https://blog.csdn.net/lonly_maple/article/details/83658608 参考2:https://blog.csdn.net/xtfge0915/a ...
- Linux 第一个静态库 (两种方法)
方法1 --------------------------------------------- Linux下 静态库 一般为.a为扩展名 类似 lib***.a 的文件名.利用静态函数库编译 ...
- WPF Grid新增框选功能
有时候会有框选的需求,类似EXCEL一样,画一个框选择里面的子控件. 选择后比如可以将子控件的Border设置为红色边框 说下这个功能的大致原理.背景是一个Grid,比如里面放了很多的Button. ...
- SSM整合二
总结 <!-- 批量删除 --> <delete id="deleteAll"> delete from tbl_emp where emp_id in & ...
- Mybatis出现错误org.apache.ibatis.executor.ExecutorException: No constructor found in
错误显示没有发现构造器. 其实就是重写了构造器后,忘了补写一个默认的空参构造器了.此类的错误还经常出现在spring等这种大量使用反射的框架中.因为这些框架在调用反射的类后会默认调用默认的构造器 解决 ...
- Bing每日壁纸的RESTful接口实现
0x00 存在意义 权且当作Docker打包的练习. 显然可以通过构造请求获得每天的壁纸,但是如果想要优雅地在其它地方使用这一网络资源,封装一个RESTful API将会保证整洁美观,在编写CSS等场 ...
- MySQL双主+Keepalived高可用
原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 基础环境 二 实际部署 2.1 安装MySQL 2.2 初始化MySQL 2. ...
- Linux常用命令(一)之文件处理命令
分时的多用户.多任务的操作系统 多数的网络协议的支持(unix和tcp/ip协议是同时发展起来的),方便的远程管理(可以通过图形.命令行) 强大的内存管理和文件管理系统 大量的可用软件和免费软件(游戏 ...