Skip to content
0

缺一分治 & CF1425B Blue and Red of Our Faculty! 笔记

这是一种 01 背包,但是每次强制第 i 个物体不选,然后询问背包,暴力做是 O(n2V) 的。

考虑分治,当递归到区间 [l,r] 时,不将 [l,r] 放入背包,递归时就是 [l,mid] 放入背包然后递归 (mid,r],反过来同理,当递归到叶子节点时结束,分治树的层数是 O(logn) 层,每层每个物品只会放入 / 移出背包 O(1) 次,因此时间复杂度 O(nVlogn)

题解

首先要看清题,这个图是若干个包含 1 的环构成的。

考虑遍历完后,树上的环有哪些情况。

image

不难发现:

  • 3,4,5 作为终止状态,三种环总共只会在一个方案中出现至多一次。
  • 3 与环 5 的这个接口长度必然是 1,不然还能走。
  • 3 出现说明其他所有环都是环 1,即不存在环 2
  • 若环 3,4,5 均不出现,则环 2 不出现。

可以发现,只有环 1,2,3 的情况只要随便 DP 一下就好了。先考虑以环 4,5 为终止状态的部分,由于我们不关心到底有几条红边和蓝边,于是套路地状态只记录边数差值即可,即设 fi,j 表示考虑前 i 个环均为环 1,2,边数差为 j 的方案数,转移很简单,环 1 红边 / 环 1 蓝边 / 不选三种,ai 为环长。

fi,jfi1,jai+fi1,j+ai+fi1,j

其中第一维其实可以直接滚掉。考虑确定环 4,5 是哪个环,那么就变成了缺一分治模板。

当我们递归到 l=r 时,这个位置就是 4,5 对应的环,我们枚举蓝边的个数 x,即可求出红边的个数 alx(环 4),于是答案就是 2×fl,aixx。环 5 同理,但是要注意不要和环 3 重复了。

接着考虑只有环 1,2,3 的情况,设 fi,j,0/1 表示前 i 个环红蓝边差距为 j,有多少个环 3,其他环都是环 1 的方案数。

fi,j,kfi1,jai,k+fi1,j+ai,kfi,j,1fi1,j(ai1),0+fi1,j+(ai1),0

由于这里没有讨论接入方式(显然环 3 有两种接入方式),因此最终答案要 fn,0,1×2

时间复杂度 O(m2logm),空间复杂度 O(m2)

最近更新