「codeforces - 1284G」Seollal
给定 \(n\times m\) 的网格图,有些格子有障碍,无障碍且相邻的格子之间连边形成图。保证 \((1, 1)\) 无障碍,保证无障碍格子连通。
将网格图黑白染色,相邻格子颜色不同,\((1, 1)\) 为黑色。
构造一棵生成树,使得以 \((1, 1)\) 为根时,所有叶子都为白色。注意:即使 \((1, 1)\) 度数为 \(1\),也不能视为叶子。
拟阵交。
黑白染色后每条边最多连一个黑点。考虑构造拟阵 \(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 定理竟然是拟阵并的直接推论。
“在研究中作者发现了任意的正则拟阵的基的计数都可以通过计算一个关联矩阵的行列式求得,而矩阵树定理是其中的特例。”
最新文章
- 个人评测——K米
- js判断是手机还是电脑访问网站
- jmeter性能测试小小的实战
- MYSQL绿色安装过程
- 解决chrome在docky上的图标模糊或不能锁定的问题
- 洛谷 P1462 通往奥格瑞玛的道路 Label: 最小化最大值 &;&; spfa (存多条边示例)
- UE4编程之C++创建一个FPS工程(二)角色网格、动画、HUD、子弹类
- Oracle RAC学习笔记:基本概念及入门
- JS它DOM
- BOM总结
- 【原创】navicat for sqlite 11.1.12 patch 永久试用 不报毒
- Typora 快捷键
- python3 shell 中添加清屏
- 【EF6学习笔记】(九)异步处理和存储过程
- Javascript面向对象编程(三):非构造函数的继承(对象的深拷贝与浅拷贝)
- Twitter开发
- 模拟远程SSH执行命令的编解码说明
- Tomcat无法启动8005端口,提示:java.net.ConnectException: 拒绝连接 (Connection refused)
- python中 decimal不能直接应用于float数据
- javascript飞机大战-----007爆炸效果
热门文章
- 华为云 Kubernetes 管理员实训 五 课后作业
- Centos安装rrdtool的yum源
- hal 编码器做用户输入时捕获初值的设置
- 浅谈xss漏洞
- [GKCTF2020]EZ三剑客-EzNode&;[GYCTF2020]Ez_Express
- [JavaWeb]反序列化分析(二)--CommonCollections1
- Activity Fragment Service生命周期图
- nginx配置支持websocket
- ApacheCN 计算机视觉译文集 20210203 更新
- 社交网络分析的 R 基础:(三)向量、矩阵与列表