Public Judge Round 5
feecle6418 · · 个人记录
这次 PR 打得很自闭,如果 NOI 的时候这样估计就没学上了!!!1
A
为什么大家都会做啊??????
考虑一种生成强连通块的方式:
- 从一个点开始,不停并上一条路径,要求路径的起点、终点都在当前连通块内。
可以发现,任意强连通块都能被生成。
(这个我不会证,而且一点也不显然吧,有没有老哥教我是怎么快速想到的啊???)
直接据此可以设计
改一下 dp 方式,设
B
感觉这题比上题可做一点。比赛时差点想到正解,但是确实差点。vp 的时候没发现是“树上拓扑序计数”,dfs 的过程中直接把真实值搜出来了。
考虑 dfs 确定整个排列。可以发现,在 dfs 过程中只用确定
C
这个题太恐怖了,网上一共就找到 3 篇题解,三篇来回看才懂。而且还不敢说完全懂了。
Konig 定理:最小点覆盖
通过二分图匹配集合的拟阵性质,可以发现只需要求出在匹配的白点加入顺序意义下的最小字典序匹配即可。设为最优匹配,记最优匹配中的左部点集合为
考虑 Konig 定理的证明过程(这个证明过程多次直接运用(祭祀,Birthdays)):首先,最大匹配中每条边都至少有一端属于
将二分图的边定向,匹配边方向 右 -> 左,非匹配边方向 左 -> 右。从左部不在匹配中的点开始 dfs,设
注意到
关于
- 只保留
L_+,R_+ ,存在R_+ 的完美匹配。(因为R_+ 都是匹配点) - 只保留
L_-,R_- ,存在L_- 的完美匹配。(同上) -
同时
- 设
L_k 为L 中编号前k 小的点,则best(L_k,R)\subseteq best(L,R) 。(拟阵性质)
用分治解决:设
将
由 3. 4. 知道,
由 3. 4. 知道只需要把它并上
这个分治过程有一个疑问:为什么要传入
- ”保证复杂度“,也即,尽可能利用已有的信息,减少”还未确定匹配否“的集合的大小(这个想法是成功的,因为的确每次递归
X 的大小都会减半)。 - 同时,将其一起下传避免了对
R 一侧到底匹配谁的讨论(我们知道它在答案,但不需要确定怎么在答案里的)。
实现上,找出匹配直接贪心;dfs 的过程可以用线段树模拟。