给定 \(n\times m\) 的网格图,有些格子有障碍,无障碍且相邻的格子之间连边形成图。保证 \((1, 1)\) 无障碍,保证无障碍格子连通。

将网格图黑白染色,相邻格子颜色不同,\((1, 1)\) 为黑色。

构造一棵生成树,使得以 \((1, 1)\) 为根时,所有叶子都为白色。注意:即使 \((1, 1)\) 度数为 \(1\),也不能视为叶子

link。


拟阵交。

黑白染色后每条边最多连一个黑点。考虑构造拟阵 \(M_1 = (E, \mathcal I_1)\) 表示删除独立集中的边,黑点相邻的边数 \(\geq 2\)(注意反过来加边不能构成拟阵,删边才可以)。这里需要特判初始时是否所有黑点(当然,除了 \((1, 1)\))度数 \(\geq 2\)。

另一个拟阵 \(M_2 = (E, \mathcal I_2)\) 就可以套路地构造成图拟阵的对偶拟阵即可(删去独立集中的边,图仍然连通)。

求出最大拟阵交,检验是否为生成树。


放个参考资料,这里有一份简单的拟阵 & 拟阵交算法介绍(一个系列共四篇),更详尽的内容可移步至 2018 年集训队论文《浅谈拟阵的一些拓展及其应用 —— 江苏省淮阴中学 杨乾澜》。

几道拟阵交习题:

gym 102156D。

codechef CNNCT2。

kattis RainbowGraph(带权)。

UVA 12370(Shannon Switching Game,结论的证明可参考论文 https://www.docin.com/p-48440222.html ,其中拟阵并的部分可以回去看论文)。


以下内容可能有符号不严谨的地方,见谅。

简单写个拟阵交算法的流程:类似于二分图匹配,将所有元素分为两部,\(I\) 部表示已在拟阵交的,\(S\setminus I\) 部表示未在拟阵交的。

对于所有 \(x\in S\setminus I\),当 \(I + \{x\}\in \mathcal I_1\),建边 \(s\to x\);当 \(I + \{x\}\in \mathcal I_2\),建边 \(x\to t\)。

对于所有 \(x\in S\setminus I, y\in I\),当 \(I - \{y\} + \{x\}\in \mathcal I_1\),建边 \(y\to x\);当 \(I - \{y\} + \{x\}\in \mathcal I_2\),建边 \(x\to y\)。

那么一条 \(s\to t\) 的最短增广路翻转后,总可以得到更大的拟阵交。

如果带权,则给 \(X\) 部的点权 \(-v\),给 \(Y\) 部的点权 \(v\),跑以点权和最大为第一关键字,以边数最少为第二关键字找 \(s\to t\) 的增广路。如果直接跑 spfa(bellman-ford) 则一定是边数最少。


证明正确性分两部分:每次翻转后得到的仍是拟阵交;不存在增广路时一定是最大拟阵交。

严谨证明见论文,这里只提证明思路。

先证前一个,不妨设增广路为 \(x_0 \to y_1 \to x_1 \to \dots y_t \to x_t\)。

引入闭包算子的概念:\(cl(A) = \{x|r(A + \{x\}) = r(A)\}\)。在线代中对应张成的空间,在图论中则近似于导出子图的概念。

增广路最短等价于 \(\forall 0 < i < j \leq t, y_i \not\to x_j\),也即 \(x_j \in cl_1(I - \{y_i\})\)。

记 \(J = I - \{y_1, y_2, \dots, y_t\} + \{x_1, x_2, \dots, x_t\}\)。

如果 \(J\) 不是基,则存在一个环。取出环上 \(i\) 最小的 \(x_i\),则其他元素都 \(\in cl_1(I - y_i)\),而 \(x_i \not\in cl_1(I - y_i)\),与它们成环矛盾。

如果 \(J + \{x_0\}\) 不是基,则此时 \(x_0\) 一定在环上。而 \(x_0\not\in cl_1(I)\),一样推出矛盾。

类似地可以说明 \(\in \mathcal I_2\)。

带权的情况我也不会证,论文也没写。

再证后一个。对于任意拟阵交 \(I\) 与任意子集 \(U\),有:

\[ |I| \leq r_1(U) + r_2(S\setminus U)
\]

这是因为 \(|I| = |I\cap U| + |I \cap (S\setminus U)| \leq r_1(U) + r_2(S\setminus U)\)。

如果存在 \(I, U\) 使得等号成立,则此时 \(I\) 即最大拟阵交(有点像线性规划中的对偶),此时该定理为最小最大定理

考虑算法最后结束时,我们取 \(U\) 为所有能够到达 \(t\) 的点,并尝试说明 \(|I\cap U| = r_1(U), |I \cap (S\setminus U)| = r_2(S\setminus U)\)。

如果 \(|I\cap U| < r_1(U)\),则存在 \(x\in (U\setminus I)\) 使得 \((I\cap U) + \{x\} \in \mathcal I_1\)。

这个 \(x\) 不能满足 \(I + \{x\} \in \mathcal I_1\),否则算法还可继续。

那么存在 \(y\in (I\setminus U)\) 使得 \(I - \{y\} + \{x\}\in \mathcal I_1\)(基交换定理)。然而 \(y\not\in U\) 与 \(I - \{y\} + \{x\}\in \mathcal I_1\) 矛盾。

另一种情况类似。

带权的情况有推广的最小最大定理,详情见论文。


论文的一些其他东西:

Hall 定理竟然是拟阵并的直接推论。

“在研究中作者发现了任意的正则拟阵的基的计数都可以通过计算一个关联矩阵的行列式求得,而矩阵树定理是其中的特例。”

「codeforces - 1284G」Seollal的更多相关文章

  1. 「CodeForces 581D」Three Logos

    BUPT 2017 Summer Training (for 16) #3A 题意 给你三个矩形,需要不重叠不留空地组成一个正方形.不存在输出-1,否则输出边长和这个正方形(A,B,C表示三个不同矩形 ...

  2. 「CodeForces - 50C 」Happy Farm 5 (几何)

    BUPT 2017 summer training (16) #2B 题意 有一些二维直角坐标系上的整数坐标的点,找出严格包含这些点的只能八个方向走出来步数最少的路径,输出最少步数. 题解 这题要求严 ...

  3. 「CodeForces - 598B」Queries on a String

    BUPT 2017 summer training (for 16) #1I 题意 字符串s(1 ≤ |s| ≤ 10 000),有m(1 ≤ m ≤ 300)次操作,每次给l,r,k,代表将r位置插 ...

  4. 「CodeForces - 717E」Paint it really, really dark gray (dfs)

    BUPT 2017 summer training (for 16) #1H 题意 每个节点是黑色or白色,经过一个节点就会改变它的颜色,一开始在1节点.求一条路径使得所有点变成黑色. 题解 dfs时 ...

  5. 「CodeForces 476A」Dreamoon and Stairs

    Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...

  6. 「CodeForces 546B」Soldier and Badges 解题报告

    CF546B Soldier and Badges 题意翻译 给 n 个数,每次操作可以将一个数 +1,要使这 n 个数都不相同, 求最少要加多少? \(1 \le n \le 3000\) 感谢@凉 ...

  7. 「Codeforces 79D」Password

    Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...

  8. 「Codeforces 468C」Hack it!

    Description 定义 \(f(x)\) 表示 \(x\) 的各个数位之和.现在要求 \(\sum_{i=l}^rf(i)\bmod a\). 显然 ans=solve(l,r)%a; if(a ...

  9. 「Codeforces 724F」Uniformly Branched Trees

    题目大意 如果两棵树可以通过重标号后变为完全相同,那么它们就是同构的. 将中间节点定义为度数大于 \(1\) 的节点.计算由 \(n\) 个节点,其中所有的中间节点度数都为 \(d\) 的互不同构的树 ...

随机推荐

  1. nuxt服务端渲染

    <template> <div class="page"> page is search <ul> <li v-for="(it ...

  2. 利用js模拟用户的cookie信息保存

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6814761849708347907/ 默认已完成爬虫文档<爬虫学习文档顺序> 并简单搭建完展示页面和管 ...

  3. asp.net core 中优雅的进行响应包装

    目录 摘要 正常响应/模型验证错误包装 实现按需禁用包装 如何让 Swagger 识别正确的响应包装 禁用默认的模型验证错误包装 使用方法以及自定义返回结构体 SourceCode && ...

  4. Python多环境管理神器(pyenv)

    前面我们已经介绍了,python中两种最基础的虚拟环境管理工具,venv和virtualenv,其中virtualenv可以和virtualenvwrapper配合使用.详情请参考:https://w ...

  5. 【Java常用类】Math

    Math 说明 java.lang.Math提供了一系列静态方法用于科学计算.其方法的参数和返回 值类型一般为double型. 方法 abs 绝对值 acos,asin,atan,cos,sin,ta ...

  6. 设计模式-Java版-全-附代码-超生动实例

    阅读推荐:设计模式-简单篇 项目地址:https://gitee.com/zwtgit/gof23 学习网站推荐: https://refactoringguru.cn/design-patterns ...

  7. 【记录一个问题】ndk下使用c++11的condition_variable问题较多

    1.存在通知丢失的情况:生产者线程通知196次,消费者线程收到190次,导致部分数据无法被处理. 2.cond.wait()方法后的加锁有问题,导致对空队列进行出队操作然后coredump.一直记得w ...

  8. 🏆【Alibaba中间件技术系列】「Nacos技术专题」配置中心加载原理和配置实时更新原理分析(上)

    官方资源 https://nacos.io/zh-cn/docs/quick-start.html Nacos之配置中心 动态配置管理是 Nacos的三大功能之一,通过动态配置服务,可以在所有环境中以 ...

  9. LSM树以及在hbase中的应用

    转自:http://www.cnblogs.com/yanghuahui/p/3483754.html 讲LSM树之前,需要提下三种基本的存储引擎,这样才能清楚LSM树的由来: 哈希存储引擎  是哈希 ...

  10. java内部类概述和修饰符

    1 package face_09; 2 /* 3 * 内部类访问特点: 4 * 1,内部类可以直接访问外部类的成员. 5 * 2,外部类要访问内部类,必须建立内部类的对象. 6 * 7 * 一把用于 ...