洛谷传送门

DGMATRIX


分析

先任意构造出一个不一定满足值域的矩阵,现在只需要满足值域就可以了。

可以发现,给一行或一列依次加一减一2*2矩阵的和仍然不变,并且如果有解一定能构造出一组方案。

因为第一行和第一列如果确定,所以只要通过这样的加一减一,其它位置就能确定。

设行的选择为 \(dx[i]\),列的选择为 \(dy[j]\),那么就要满足 \(0\leq a[i][j]+dx[i]+dy[j]\leq 10^6\)

可是这样的加法好像也挺难做的,能不能强制让一个为加,一个为减,这是可行的,将矩阵黑白染色。

如果 \(i\) 和 \(j\) 奇偶性不同,那么 \(dy[j]-dx[i]\leq M-a[i][j],dx[i]-dy[j]\leq a[i][j]\),

同奇同偶的情况正好将 \(dx[i]\) 和 \(dy[j]\) 调换即可,跑一遍最短路如果有负环那么无解,否则同样按照奇偶性输出方案即可。


代码(矩阵游戏)

#include <cstdio>
#include <cctype>
#include <deque>
#define rr register
using namespace std;
const int N=301,M=1000000; deque<int>q;
struct node{int y,w,next;}e[N*N<<1]; long long dis[N<<1];
int cnt[N<<1],et,as[N<<1],v[N<<1],a[N][N],n,m,flag;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
inline void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline void add(int x,int y,int w){
e[++et]=(node){y,w,as[x]},as[x]=et;
}
signed main(){
for (rr int T=iut();T;--T){
n=iut(),m=iut(),et=0;
for (rr int i=1;i<=n+m;++i) dis[i]=1e15;
for (rr int i=1;i<=n+m;++i) as[i]=cnt[i]=v[i]=0;
for (rr int i=1;i<n;++i)
for (rr int j=1;j<m;++j) a[i][j]=iut();
for (rr int i=n-1;i;--i)
for (rr int j=m-1;j;--j)
a[i][j]-=a[i+1][j]+a[i][j+1]+a[i+1][j+1];
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=m;++j)
if ((i+j)&1) add(i,j+n,M-a[i][j]),add(j+n,i,a[i][j]);
else add(i,j+n,a[i][j]),add(j+n,i,M-a[i][j]);
while (!q.empty()) q.pop_back();
q.push_back(1),dis[1]=0,v[1]=flag=1;
while (!q.empty()&&flag){
rr int x=q.front(); q.pop_front();
if (++cnt[x]==n+m) {flag=0; break;}
for (rr int i=as[x];i;i=e[i].next)
if (dis[e[i].y]>dis[x]+e[i].w){
dis[e[i].y]=dis[x]+e[i].w;
if (!v[e[i].y]){
v[e[i].y]=1;
if (!q.empty()&&dis[e[i].y]<dis[q.front()])
q.push_front(e[i].y);
else q.push_back(e[i].y);
}
}
v[x]=0;
}
if (!flag) printf("NO\n");
else{
printf("YES\n");
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=m;++j){
if ((i+j)&1) print(a[i][j]-dis[i]+dis[j+n]);
else print(a[i][j]+dis[i]-dis[j+n]);
putchar(j==m?10:32);
}
}
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<=m;++j) a[i][j]=0;
}
return 0;
}

代码(DGMATRIX)

#include <cstdio>
#include <cctype>
#include <deque>
using namespace std;
const int N=111,M=9; deque<int>q;
struct node{int y,w,next;}e[N*N<<1];
int et,as[N<<1],v[N<<1],dis[N<<1],a[N][N],n,m;
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
void print(int ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
void add(int x,int y,int w){
e[++et]=(node){y,w,as[x]},as[x]=et;
}
int main(){
n=iut()+1;
for (int i=1;i<=n*2;++i) dis[i]=0x3f3f3f3f;
for (int i=1;i<n;++i)
for (int j=1;j<n;++j) a[i][j]=iut();
for (int i=n-1;i;--i) for (int j=n-1;j;--j)
a[i][j]-=a[i+1][j]+a[i][j+1]+a[i+1][j+1];
for (int i=1;i<=n;++i)
for (int j=1;j<=n;++j)
if ((i+j)&1) add(i,j+n,M-a[i][j]),add(j+n,i,a[i][j]);
else add(i,j+n,a[i][j]),add(j+n,i,M-a[i][j]);
q.push_back(1),dis[1]=0,v[1]=1;
while (!q.empty()){
int x=q.front(); q.pop_front();
for (int i=as[x];i;i=e[i].next)
if (dis[e[i].y]>dis[x]+e[i].w){
dis[e[i].y]=dis[x]+e[i].w;
if (!v[e[i].y]){
v[e[i].y]=1;
if (!q.empty()&&dis[e[i].y]<dis[q.front()])
q.push_front(e[i].y);
else q.push_back(e[i].y);
}
}
v[x]=0;
}
for (int i=1;i<=n;++i){
for (int j=1;j<=n;++j)
if ((i+j)&1) putchar(48+a[i][j]-dis[i]+dis[j+n]);
else putchar(48+a[i][j]+dis[i]-dis[j+n]);
putchar(10);
}
return 0;
}

#差分约束系统#CodeChef Digit Matrix&洛谷 7515 [省选联考 2021 A 卷] 矩阵游戏的更多相关文章

  1. 洛谷 P7515 - [省选联考 2021 A 卷] 矩阵游戏(差分约束)

    题面传送门 emmm--怎么评价这个题呢,赛后学完差分约束之后看题解感觉没那么 dl,可是现场为啥就因为种种原因想不到呢?显然是 wtcl( 先不考虑"非负"及" \(\ ...

  2. 洛谷 P7520 - [省选联考 2021 A 卷] 支配(支配树)

    洛谷题面传送门 真·支配树不 sb 的题. 首先题面已经疯狂暗示咱们建出支配树对吧,那咱就老老实实建呗.由于这题数据范围允许 \(n^2\)​ 算法通过,因此可以考虑 \(\mathcal O(n^2 ...

  3. 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)

    洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\)​ \(10^9\)​ 的时代了吗?落伍了落伍了/ ...

  4. 洛谷P6623——[省选联考 2020 A 卷] 树

    传送门:QAQQAQ 题意:自己看 思路:正解应该是线段树/trie树合并? 但是本蒟蒻啥也不会,就用了树上二次差分 (思路来源于https://www.luogu.com.cn/blog/dengy ...

  5. 洛谷 P6624 - [省选联考 2020 A 卷] 作业题(矩阵树定理+简单数论)

    题面传送门 u1s1 这种题目还是相当套路的罢 首先看到 \(\gcd\) 可以套路地往数论方向想,我们记 \(f_i\) 为满足边权的 \(\gcd\) 为 \(i\) 的倍数的所有生成树的权值之和 ...

  6. [题解] LOJ 3300 洛谷 P6620 [省选联考 2020 A 卷] 组合数问题 数学,第二类斯特林数,下降幂

    题目 题目里要求的是: \[\sum_{k=0}^n f(k) \times X^k \times \binom nk \] 这里面出现了给定的多项式,还有组合数,这种题目的套路就是先把给定的普通多项 ...

  7. 洛谷P4382 [八省联考2018]劈配(网络流,二分答案)

    洛谷题目传送门 说不定比官方sol里的某理论最优算法还优秀一点? 所以\(n,m\)说不定可以出到\(1000\)? 无所谓啦,反正是个得分题.Orz良心出题人,暴力有70分2333 思路分析 正解的 ...

  8. 洛谷P3746 [六省联考2017]组合数问题

    题目描述 组合数 C_n^mCnm​ 表示的是从 n 个互不相同的物品中选出 m 个物品的方案数.举个例子,从 (1;2;3) 三个物品中选择两个物品可以有 (1;2);(1;3);(2;3) 这三种 ...

  9. dp凸优化/wqs二分学习笔记(洛谷4383 [八省联考2018]林克卡特树lct)

    qwq 安利一个凸优化讲的比较好的博客 https://www.cnblogs.com/Gloid/p/9433783.html 但是他的暴力部分略微有点问题 qwq 我还是详细的讲一下这个题+这个知 ...

  10. 洛谷 4383 [八省联考2018]林克卡特树lct——树形DP+带权二分

    题目:https://www.luogu.org/problemnew/show/P4383 关于带权二分:https://www.cnblogs.com/flashhu/p/9480669.html ...

随机推荐

  1. XXL-Job框架入门介绍

    框架概述 框架主页: https://www.xuxueli.com/xxl-job/ 包含组件: 1.调度中心 2.任务执行器 特点: 1.调度中心,任务执行器独立部署,互不影响. 2.调度中心和任 ...

  2. RN运行ios报错No matching function for call to 'RCTBridgeModuleNameForClass'

    xcode更新12.5后,ios运行报错No matching function for call to 'RCTBridgeModuleNameForClass' 解决方法: 在ios/Podfil ...

  3. 项目实战:Qt+OSG三维2D文字实时效果查看工具

    需求   OSG三维中2D文字的基本属性较多,方便实时查看效果,并出对应文本代码.   Demo      工具下载地址   CSDN免积分下载地址:https://download.csdn.net ...

  4. 答应我,在vue中不要滥用watch好吗?

    前言 上周五晚上8点,开开心心的等着产品验收完毕后就可以顺利上线.结果产品突然找到我说要加需求,并且维护这一块业务的同事已经下班走了,所以只有我来做.虽然内心一万头草泥马在狂奔,但是嘴里还是一口答应没 ...

  5. 解决celery与django结合后,分别启动celery和django的进程同时调用定时任务的问题

    django中引入celery后发现在代码中写如下这样的定时任务,启动celery和django的工程后,他们都会调用这个定时任务导致,任务有的时候会冲突出现奇怪的问题.如何解决请继续看. sched ...

  6. [程序] C++实现 http和https的反向代理程序

    目录 前言 代理原理 http代理 https代理 实现 客户端 服务端 遇到的所有问题记录 Python对于回复不响应 接受的数据只有4字节 最终数据已经发给Python了 但是Python还是阻塞 ...

  7. RocketMQ(7) 消费幂等

    1 什么是消费幂等 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消 费并未对业务系统产生任何负面影响,那么这个消费过程就是消费幂等的. 幂等:若某操作执行多 ...

  8. 青少年CTF训练平台-web部分随笔

    文章管理系统 首先打开环境(>ω<。人)ZZz♪♪ 既然要做题,就要做全面了,图上说了,既然有假flag我就先找出来: 假flag: 打开vmware,使用sqlmap进行处理: sqlm ...

  9. Jmeter+Influxdb+Grafana搭建

    背景 在无界面压测情况下,我们需要去额外搭建可视化观测平台.借助于Influxdb+Grafana,我们可以轻松让Jmeter的结果自动写入Influxdb,Influxdb实时存储运行结果,最后由G ...

  10. Mutillidae品台上使用sqlmap注入测试

    Mutillidae是一个开放源码的提供安全渗透测试的Web应用程序, Mutillidae可以安装在Linux.windows xp.windows 7等平台上.下载及安装说明文档详见:mutill ...