OI复健计划
由于准备再战XCPC, 因此我要开始复健OI!
图论
2-SAT
感觉之前打oi的时候理解的并不透彻啊. 首先,2-SAT算法的本质是以下两个公式:
因此,当我们遇到一个2-CNF的时候,我们会尝试把其中的所有
你可能会有个疑问: 既然
得到新的公式后,我们就进行建图,并且的确同一个SCC内的原子公式必须取相同值,从而我们必然需要从后往前取SCC,这就有了三种情况:
和 在同一个SCC里,此时必然无解. 在 里, 在 里,并且有 .此时当然只能选择 . 在 里, 在 里,但是 和 没有任何依赖关系,此时随便选一个.
等一下,(3)这里竟然可以随便选一个?那我立刻就想到一种情况啊:比如
为了理解为什么这里不会出矛盾,我们来看一下此时
我们重新回到刚才那个问题:为什么添加
如果
然而这还是有问题,那为什么不可能出现
现在应该容易给出为何只要
我们最后想说明在新得到的图中,一定存在一个"后缀子图"(这名字是我自己编的,但是应该可以理解是什么意思?),使得其恰好完成了上面的选择.为此我们直接倒着拓扑排序开始扩张,如果遇到一个可以加入的SCC就加入.这样做一定可以取出
已经被加入了,因此 不能被加入. 的排序在 之前,意味着 .
可是这意味着
数据结构
莫队
重新学了一下莫队-回滚莫队-二次离线莫队, 总结一下就是:
- 当你发现你可以快速扩大或者缩小区间并且计算答案的时候, 进行莫队.
- 当你发现可以快速扩大区间, 但很难缩小区间的时候, 进行回滚莫队.
- 当你发现扩大区间和缩小区间都带一个额外的复杂度, 尝试二次离线莫队.
评论