给定 \(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. Maven+ajax+SSM实现新增

    转载自:https://www.cnblogs.com/kebibuluan/p/9014986.html 20.尚硅谷_SSM高级整合_新增_创建员工新增的模态框.avi 1.接下来当我们点击增加按 ...

  2. Struts-S2-045漏洞利用

    最近也是在看Struts2的漏洞,这里与大家共同探讨一下,本次我复现的是s2-045这个编号的漏洞 漏洞介绍 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号C ...

  3. vscode设置vue结构的初始代码片段

    { "Print to console": { "prefix": "vue", "body": [ "< ...

  4. MINItest软件架构总结

    MINItest软件架构总结 ----helloWen MINItest软件架构总结1. Problem Description2. Analysis3. Solution3.1. 通过读取设备信息来 ...

  5. Python函数与lambda 表达式(匿名函数)

    Python函数 一.函数的作用 函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段 函数能提高应用的模块性和代码的重复利用率 python 内置函数:https://docs.pytho ...

  6. RBAC: K8s基于角色的权限控制

    文章目录 RBAC: K8s基于角色的权限控制 ServiceAccount.Role.RoleBinding Step 1:创建一个ServiceAccount,指定namespace Step 2 ...

  7. linux软件安装命令

    rpm命令安装 安装 rpm -ivh 包全名(如果当前目录不是软件包所在目录,就需要加绝对路径) -i 安装 -v 显示详细信息 -h 显示进度 升级 rpm -Uvh 包全名 -U 升级 卸载 r ...

  8. unity3d发布安卓出错plese set the package name

    发布时报错 参考https://forum.unity.com/threads/where-is-package-name-setting.318839/ 参考https://answers.unit ...

  9. 第03讲:Flink 的编程模型与其他框架比较

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 本课时我们主要介绍 ...

  10. 学习Java第11天

    今天所做的工作: 敲代码,按照教材进度,我已经"学完了",用引号引起来. 明天工作安排: 敲代码 所遇到的困难及解决方法: 虽然是"学完了",但真正写起来还是有 ...