CF1292F Nora's Toy Boxes [* hard]
给定 (n(nle 60)) 个不同的 (le 60) 的正整数,当 ((i,j,k)) 满足 (a_i|a_j) 且 (a_i|a_k) 时可以将 (a_k) 删除,求删除最多数的删除序列数。
( m Sol:)
若 (a_i|a_j),那么连边 (a_i o a_j),接下来我们对于每个弱连通图单独进行考虑。
一个显然的性质是,若 (j o k,i o j) 那么 (i o k),即整除的传递性。
先考虑结尾序列,显然度数为 (0) 的点必然不可以删除,对于这张弱联通图,我们记 S 为度数为 (0) 的点的集合,T 为度数不为 (0) 的点的集合。
我们可以证明,任意选 T 中一个点都是一个可以得到的删除序列的终止状态。
接下来考虑进一步转换,事实上,假设知道一个终止状态,然后我们每次给其增加一个可以遍历到的节点,那么一个遍历序列实际上就可以确定一个删除序列。
然后注意到此图为弱连通图,那么任意两点之间都存在边直接或间接相连,考虑初始有一个点 (x),假设 (u) 可以遍历到 (x),那么 (u) 能遍历到的所有节点 (x) 都可以遍历得到。
考虑一种遍历的传递性,然后就感觉这个 (x) 可以遍历到所有节点(证起来也很好证)
于是问题变为考虑一张由整除关系建立的图,每次可以访问一个节点然后获得所有能够访问到他的节点,然后可以遍历这些节点能够遍历的节点的并集中的一个节点,求方案数。
然后接下来我们可以证明 (|S|le frac{60}{4})
显然的事实是,(S) 内的点都 (le 30),否则这个点没有出边即无法构成弱联通,其次,由于整除关系即若 (i|j) 那么我们连边 (i o j),那么 S 内的点的最大值不会超过 (1sim 30) 的点构成的独立集的大小。
对于 x 为奇数,加入的每个节点都会导致 (2x) 无法加入,换而言之 (S) 的大小上界为 (15),于是我们考虑一个状压 dp,然而直接处理需要知道每个节点选或者不选,这非常难受,考虑这样的一件事,我们实际上只需要知道能够遍历到当前点集 T 中的点 (x) 构成的集合 S 具体如何即可。
接下来将 T 集中的点进行分类,对于当前 S,如果加入他无法改变 S,那么设其为 S 的非关键点,否则设为关键点,这样的话对于当前 S,关键点一定没有被加入,我们进行 dp 实际上只需要对非关键点考虑遍历即可,设 (f_{S,i}) 表示当前考虑到集合 S,内部可以遍历到的节点已经访问了 (i) 个(当然要预处理点总数 (c)),那么转移有两类:
- 访问关键点,那么 S 改变。
- 访问非关键点,那么 (i+1) 即可。
一个 brute 是考虑对每个初始被选入 T 上的点进行一次 dp,不过事实上只需要将 (f_{S,1}) 设为 (1) 即可,然后 dp 的第二类转移是复杂度瓶颈,不过这一部分常数极小,所以复杂度上界为 (mathcal O(2^{frac{n}{4}} imes n^2))