「codeforces - 1284G」Seollal


description

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

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

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

problem link。


solution

拟阵交。

注意到黑白染色后,每条边最多属于一个黑点,因此可以构造边拟阵 \(I_1\) 表示删除独立集 \(P\) 的边后,剩下的黑点相邻的边数 \(\geq 2\)(注意反过来加边不能构成拟阵,删边才可以)。这里需要特判初始时黑点度数是否 \(\geq 2\)

另一个拟阵 \(I_2\) 就可以套路地构造成图拟阵的对偶拟阵即可。求出最大拟阵交,检验是否为生成树。

至于怎么求拟阵交,可以参考 2018 年集训队论文《浅谈拟阵的一些拓展及其应用 —— 江苏省淮阴中学 杨乾澜》。


submission

An accepted submission.


details

放个参考资料,这里有一份简单的拟阵 & 拟阵交算法介绍

update in 2021/01/09:草,链接放错了。找不到原来那个链接了,跑路了跑路了。

简单写个拟阵交算法的流程(当然,没有证明):类似于二分图匹配,构造 \(X\) 部表示已在拟阵交的,\(Y\) 部表示未在拟阵交的。

对于所有 \(u\in Y\),当 \(X\cup u\in I_1\),建边 \((s, u)\);当 \(X\cup u \in I_2\),建边 \((u, t)\)

对于所有 \(u\in Y,v\in X\),当 \((X\setminus v)\cup u \in I_1\),建边 \((v,u)\);当 \((X \setminus v)\cup u\in I_2\),建边 \((u,v)\)

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

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

posted @ 2020-09-07 22:31  Tiw_Air_OAO  阅读(108)  评论(0编辑  收藏
把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end