1 条题解

  • 10
    @ 2026-10-9 16:07:30

    Rikka with Match

    某人号 Sam 尝曰:最大独立集乃树上背包也。

    余曰:误人子弟。最大独立集乃贪心也。

    Rikka with Match。

    给定 nn 个点的树,求有多少中割边的方案使得最大匹配大小被 mm 整除。

    n≤5×104,m≤200n\le 5\times10^4,m\le 200。

    将最大匹配转化为最大独立集后,首先我们应该想如何刻画最大独立集:

    贪心:

    按深度从大到小选择点。只要这个点可以选择就选择。

    那么我们就可以得出一个 DP 状态并利用上述贪心转移:定义 fi,j,kf_{i,j,k} 为 ii 的子树,最大独立集模 mm 为 jj,且 ii 选择/不选择的方案数。

    然后初始化是比较简单的,因为按照贪心,一开始是时候只有 ii 一个点,于是必须选择,那么就有 fx,1,1=1f_{x,1,1}=1,其余为 00。

    考虑仿照树形背包,逐步加入儿子 uu。

    那么对于儿子 uu,我既可以断掉这条边,也可以不断。

    Case #1:断

    这个时候 uu 的选择就与 xx 无关了,那么只需要对第二维进行树形背包即可(注意,我写的所有转移的第二维都是在模意义下的):

    $$f_{x,i,0/1}\leftarrow\sum_{j+k=i}f_{x,j,0/1}(f_{u,k,0}+f_{u,k,1})$$

    Case #2:不断

    此时 uu 的选择就会影响 xx 了。

    那么不妨枚举 xx 的状态 pp 和 uu 的状态 qq。

    Case #2.1

    若 p=0p=0,则 xx 必然不会被选择,那么此时 uu 的状态 qq 就不会有影响了,因此有转移:

    $$f_{x,i,0}\leftarrow\sum_{j+k=i}f_{x,j,0}(f_{u,k,0}+f_{u,k,1})$$

    Case #2.2

    若 p=1,q=0p=1,q=0,则根据贪心,此时 xx 依然继续选择,因此:

    fx,i,1←∑j+k=ifx,j,1fu,k,0f_{x,i,1}\leftarrow\sum_{j+k=i}f_{x,j,1}f_{u,k,0}

    Case #2.3

    若 p=1,q=1p=1,q=1,那么此时根据贪心,xx 的状态要有选择变为不选择,即,最大独立集的大小会 −1-1。

    那么同样的,我们也可以得出转移:

    $$f_{x,i-1,0}\leftarrow\sum_{j+k=i}f_{x,j,1}f_{u,k,1}$$

    总结

    上面的四种转移转移完成后,这题就可以以 O(nm2)\mathcal{O}(nm^2) 的复杂度完成,预期得分 5050。

    然后就是一个可能会被遗忘的优化:这个转移本质上只是树形背包的变体,因此只需要在转移的时候,将上界 mm 换成 min⁡{m,szx}\min\{m,sz_x\} 和 min⁡{m,szu}\min\{m,sz_u\} 就行了。

    这样就可以做到 O(nm)\mathcal{O}(nm) 了。

    • @ 2026-10-9 16:15:07

      我的意思是:此题就从最大独立集下手,使用树形背包解决:)

    • @ 2026-10-9 17:38:32

      @

      Sam 原话:“最大独立集树形背包啊”

    • @ 2026-10-9 17:40:23

      @ 那是你理解有误:)

    • @ 2026-10-12 10:26:02

      贪心嵌套dp。贪心是为了保证最优(最大独立集),dp是用来计数。 边“断开与不断开”是不定量,只能将点的选择和不选择作为状态的一个维度。 然而,“点的选择/不选择“是“贪心”、“边的状态”的结果。 根据“边状态”的改变,选择/不选择也是需要改变的。

      按照题解中写法,i∈[0,min⁡(m−1,szx)]i \in [0, \min(m-1, sz_x)], j∈[0,min(m−1,szu)]j \in [0, min(m-1, sz_u)]

  • 1

信息

ID
2787
时间
2000ms
内存
512MiB
难度
8
标签
(无)
递交数
21
已通过
4
上传者