全序矩阵
名字我瞎起的。
给出两个序列 \(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]\),由性质(二),
下侧 \(\to\) 上侧 同理于上文。
左侧 \(\to\) 上侧
设经过行区间 \([d,u]\),列区间 \([l,r]\),由性质(二)和(三),存在 \(x,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\),然后用上面结论,然后二分啥的维护。
本文来自博客园,作者:ShaoJia,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。