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 ...
随机推荐
- flutter获取状态栏高度及安全区域
获取状态栏高度: final double statusBarHeight = MediaQuery.of(context).padding.top; 所谓安全区域,就是适配现在一些刘海屏之类的非常规 ...
- 【java虚拟机】分代垃圾回收策略的基础概念
作者:平凡希 原文地址:https://www.cnblogs.com/xiaoxi/p/6602166.html 一.为什么要分代 分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一 ...
- 【springcloud】常见面试题总结
1.springcloud与dubbo的区别? https://jingyan.baidu.com/article/b0b63dbf3784294a483070fa.html 1.1 springcl ...
- jQuery中的内容、可见性过滤选择器(四、四)::contains()、:empty、:has()、:parent、:hidden、:visible
<!DOCTYPE html> <html> <head> <title>内容.可见性过滤选择器</title> <meta http ...
- java 接口代理
接口 public interface Cc { void say(); } 实现类: public class C implements Cc{ @Override public void say( ...
- OpenCV 生成矩形mask
生成mask的一种操作 cv::Mat mask = cv::Mat::zeros(300, 300, CV_8UC1); mask(cv::Rect(100,150,100, 50)) = 255; ...
- 微信小程序基础知识笔记
微信小程序笔记 文件构成 全局文件 app.json 小程序全局配置文件,必要,自动生成 app.js 小程序入口JS文件,一般只需申明全局变量.处理生命周期以及版本升级即可,必要 app.wxss ...
- Linux从头学11:理解了这三个概念,才能彻底理解任务管理和任务切换
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- Django的form组件——自定义校验函数
from django.shortcuts import render,HttpResponse from django import forms from django.core.exception ...
- 第三课:GDB 常用的调试命令概览
先给出一个常用命令的列表,后面会结合具体的例子详细介绍每个命令的用法. 命令名称 命令缩写 命令说明 run r 运行一个程序 continue c 让暂停的程序继续运行 next n 运行到下一行 ...