给定 \(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. 第10组 Beta冲刺 (3/5)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/14018630.html ·作业博客:https://edu.cnblogs.co ...

  2. Python常用功能函数系列总结(五)

    本节目录 常用函数一:向量距离和相似度计算 常用函数二:pagerank 常用函数三:TF-IDF 常用函数四:关键词提取 常用函数一:向量距离和相似度计算 KL距离.JS距离.余弦距离 # -*- ...

  3. java mapreduce实现网站PV分析

    原文链接: https://www.toutiao.com/i6765677128022229517/ PV 是Page Views的缩写,即页面浏览量,用户每一次对网站中的每个网页访问均被记录一次. ...

  4. println打印的原理

    由于out是System类中的一个不可变的变量 println方法在PrintStream类中 并且在打印都时候都会转换成字符串

  5. HTML、CSS、Javascript、jQuery、Xml

    HTML HTML简介 Hyper Text Markup Language (超文本标记语言)简写:HTML.通过标签来标记要显示的网页中的各个部分.网页文件本身是一种文本文件,通过在文本文件中添加 ...

  6. 《剑指offer》面试题26. 树的子结构

    问题描述 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A:      3     / ...

  7. Solon Web 开发,九、跨域处理

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  8. 云计算——实验一 HDFS与MAPREDUCE操作

    1.虚拟机集群搭建部署hadoop 利用VMware.centOS-7.Xshell(secureCrt)等软件搭建集群部署hadoop 远程连接工具使用Xshell: HDFS文件操作 2.1 HD ...

  9. 【记录一个问题】linux + opencv + gpu视频解码,好不容易编译通过,运行又coredump了

    1.首先编译了opencv + cuda   编译选项中使用了以下关于cuvid库的内容: //"nvcuvid" libraryCUDA_nvcuvid_LIBRARY:FILE ...

  10. golang中的pair

    package main import "fmt" type Reader interface { ReadBook() } type Writer interface { Wri ...