【学习笔记】CF1292F Nora‘s Toy Boxes

没啥好说的,接着干吧

这种把性质隐藏得很深的题目非常有趣。

以我现在的水平,估计还是无法独立做出来

首先我们对于 ( i , j ) (i,j) (i,j)如果满足 a i ∣ a j a_i|a_j aiaj,那么 i i i j j j连一条边。

当然,这道题并不是随便给出一个图那么简单。我们可以推出几个简单的性质:

1.1 1.1 1.1 如果 i → j , j → k i\to j,j\to k ijjk,那么 i → k i\to k ik (传递闭包性质)
1.2 1.2 1.2 这是一个 D A G DAG DAG

这个性质看起来非常亲切啊。这样我们每次选择的 i i i一定是入度为 0 0 0的点,并且这个点一定不会被删除。更神奇的是,这样的点不会超过 m 4 \frac{m}{4} 4m个。这个用抽屉原理不难理解。

那么我们考虑倒着做,一个点能够被加入当且仅当存在一个度数 > 0 >0 >0并且有连边的关键点,这里的 d p dp dp非常具有人类智慧,我们需要维护一个标记。假设关键点的集合为 S S S,最开始所有关键点都没有标记,假设加入的点没有重复,如果这个点能到达的关键点当中存在一个点 p p p被标记,那么这个点是被删除的,否则这个点没有被删除;然后把这个点能到达的所有关键点打上标记。

那么我们考虑,如果 S S S发生了变化,说明这个点之前没有被加入过,否则,这个点显然被删除了,注意到 S S S是一个并集,那么我们只需要记录之前被删除的点数目即可。这里有一个小小的推导过程(我在这里还是呈现出来了):记数字 i i i对应的关键点集合为 S i S_i Si,那么没有被删除的点的 S i S_i Si显然是不交的,并且被删除的节点 j j j对应的 S j S_j Sj不可能使这些 S i S_i Si重新相交(这可以画图通过贪心证明,因为要使得删除的点的数目最多)。因此,假设有 s z sz sz个点加入后不会改变 S S S的大小,并且之前已经删除了 i i i个点,那么能加入的点的数目为 s z − i − 1 sz-i-1 szi1(其中一个点没有被删除)。这样就做完了。注意转移顺序即可。

最后把所有连通块的答案合并起来即可。

复杂度 O ( 2 m 4 n 2 ) O(2^\frac{m}{4}n^2) O(24mn2)

你可能感兴趣的:(算法)