全序矩阵

名字我瞎起的。

给出两个序列 \(a_1,\dots,a_n\)\(b_1,\dots,b_m\),元素均属于一个全序集。

构造 \(01\) 矩阵 \(M_{i,j}=[a_i<b_j]\)

性质:

(一)\(M\) 可以通过行、列重排(具体地:将 \(a,b\) 分别排序)得到一个阶梯的值是 \(1\) 的矩阵。
(二)\(M\) 任意两行一定是子集-超集关系。
(三)\(M\) 任意两列一定是子集-超集关系。
(四)不存在 \(2\times 2\) 的子矩阵(不要求连续)使得一个对角线是 \(0\),另一对是 \(1\)
(五)前四条性质和定义互为充要条件。

考虑这样的问题:将值为 \(1\) 的位置看作障碍,能否从 \((1,1)\) 四连通地走到 \((n,m)\)

考虑一个经典的网络流建模:从左侧、下侧流到右侧、上侧,两个八连通的位置之间建边,最大流就是最少要移除的障碍数。

若原问题走不到,随便找一条流,按照起点终点分类:

左侧 \(\to\) 右侧

八连通地经过值为 \(1\) 的位置,设经过的行编号的区间为 \([d,u]\),由性质(二),

\[\exists x\in[d,i]\ \forall y\in[1,m]\ M_{x,y}=1 \]

下侧 \(\to\) 上侧 同理于上文。

左侧 \(\to\) 上侧

设经过行区间 \([d,u]\),列区间 \([l,r]\),由性质(二)和(三),存在 \(x,y\) 使得

\[M_{x,1},\dots,M_{x,y-1},M_{x,y},M_{x-1,y},\dots,M_{1,y} \]

全是 \(1\)(一个“L”形)。

下侧 \(\to\) 右侧 同理于上文。

同样地,我们来证明若能走到,一定存在一条右下路径。

套用上述证明的调整法+子集求并的思路,一定存在一行一列分别全是 \(0\),然后就可以将路径调整成不经过“一三象限”,对“二四象限”递归证明即可。

[NOIP2023] 双序列拓展:用上面的结论做完了。

XXI Open Cup, Grand Prix of Korea B. Cactus Competition:\(a_i+b_j\ge 0\implies -a_i-1<b_j\),然后用上面结论,然后二分啥的维护

posted @ 2024-09-27 16:09  ShaoJia  阅读(15)  评论(0编辑  收藏  举报