Educational Codeforces Round 173 (Rated for Div. 2) E

CF2043E

题意

给定两个 n×m 的矩阵 AB(其中的整数介于 0109 之间),可以对 A 矩阵进行如下操作,问是否能变换为矩阵 B

  • &=:选择两个整数 ix (1in,x0),并将第 i 行中的每个元素替换为 x 与该元素 and 运算的结果。
  • |=:选择两个整数 jx (1jm,x0),并将第 j 列中的每个元素替换为 x 与该元素 or 运算的结果。

数据范围:1n,m1031nm×103

做法

前置知识:差分约束系统。

按位考虑。在某一位的情况下考虑问题,操作等价替换为:

1、将某一行的元素全部变为 0

2、将某一列的元素全部变为 1

显然每一行 / 每一列均至多操作一次。

考虑给行、列操作定义执行顺序,则容易发现,若 A 中某元素 (i,j) 要从 1 变为 0,等价于对行 i 的操作一定要后于列 j,反过来也是类似。

那么,A 中元素若需要修改,则等价于给两个变量确定一个大小关系。

这让我们联想到差分约束系统。

但实际上,就算 A 中元素不需要修改,也可能需要满足某些变量之间的大小关系,具体来说:若 A 在某位置上为 0 且不需要修改,则需要考虑若该列修改过,那么该行的操作必须后于列 j,若列 j 未操作,则无要求,反过来也是类似。

因此,对于是否操作过某行 / 某列打个标记,每次确定要修改某行 / 某列时也需判断该行 / 该列的其他元素是否额外增加了约束条件。

最后跑个 spfa 判断是否有负环即可。

时间复杂度:O(TlogX(n+m)nm)(实际上远远到不了此上限)。

评测链接

posted @   chzhc  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
levels of contents
点击右上角即可分享
微信分享提示