1 条题解

  • 0
    @ 2025-8-24 22:29:42

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar 约瑟夫用脑玩
    AFO

    搬运于2025-08-24 22:29:41,当前版本为作者最后更新于2021-08-11 10:21:36,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    部分借鉴了自己P7417的题解,相较于_Enthalpy的题解补充了每个转移每一步的解释。

    首先特判二分图,不多赘述。

    沿用P7417的定义,设一个点的奇最短路和偶最短路二元组为 (x,y)(x,y),且保证 x<yx<y

    导致 (x,y)(x,y) 的方式仍然是:

    1. 有另一个点奇偶最短路分别为 (x1,y1)(x-1,y-1),并连了一条边。
    2. 有两个点分别为①(x1,y+1)(x-1,y+1) 和②(x+1,y1)(x+1,y-1),都连了一条边。注意当 x+1=yx+1=y 时,有 (x+1,y1)=(y1,x+1)=(x,y)(x+1,y-1)=(y-1,x+1)=(x,y)

    解释:方式二中①的第一维保证较小最短路为 xx,②第二维保证了较大最短路为 yy,而他们的其他维由于与 (x,y)(x,y) 的点有直接连边故最大都只能 +1。


    先按照 x+yx+y 为第一层阶段进行 DP,那么按方式一满足点的最短路是容易的,只用从上一阶段连边即可。

    又因为方式二需要同阶段前后连边,于是再按 xx 为第二层阶段依次考虑。

    而每个点要么按方式一满足,要么按方式二,要么两种都有,显然我们需要考虑只按方式二满足最短路的点对状态的影响,因为涉及到前后都必须连边。

    fx,y,pf_{x,y,p} 表示当前 DP 到 (x,y)(x,y) 的二元组,并且有 pp 个点还需要下一个状态连边,仅按方式二来满足最短路的方案。

    那么我们通过枚举只按方式一满足最短路的点的个数来转移,设有 qq 个这种点,二元组 (x,y)(x,y) 的点总共有 s1s1 个,二元组 (x1,y1)(x-1,y-1)s2s2 个,那么转移为:

    $f_{x,y,p}=\sum_{q=0}^{s1-p}\binom{s1-q}{p}(2^{s2}-1)^{s1-p}g_{x,y,q}$

    解释:

    • (s1qp)\binom{s1-q}{p}:选点的方案系数,这里表示从 s1qs1-q 个不是 只按方式一满足 的点中选出 pp 个点只按方式二转移。
    • (2s21)s1p(2^{s2}-1)^{s1-p}:连边的方案系数,不是 只按方式二满足 的点都需要方式一满足,每个点与 (x1,y1)(x-1,y-1) 的点至少连一条边。
    • gx,y,qg_{x,y,q}:辅助转移数组,表示有 s1qs1-q 个点都有 (x1,y+1)(x-1,y+1) 连边而来的方案。

    接下来考虑转移 gx,y,pg_{x,y,p},枚举上一次状态有多少个点需要当前状态回连边,设有 qq 个这种点,二元组 (x,y)(x,y) 的点总共有 s1s1 个,二元组 (x1,y+1)(x-1,y+1)s2s2 个,那么转移为:

    $g_{x,y,p}=\binom{s1}{p}\sum_{q=0}^{s2}h_{s2,q,s1-p}f_{x-1,y+1,q}$

    解释:

    • (s1p)\binom{s1}{p}:选点的方案系数,从 s1s1 个点中钦定 pp 个。
    • hs2,q,s1ph_{s2,q,s1-p}:转移系数,表示在大小为 s2s2 的集合和大小为 s1ps1-p 的集合之间连边,保证 s2s2 中的 qq 个点和大小为 s1ps1-p 的集合度数至少为 11 的方案。

    考虑处理出 hi,j,kh_{i,j,k},可以使用容斥,钦定有 ppjj 中的点没有出度:

    $h_{i,j,k}=\sum_{p=0}^j(-1)^p\binom{j}{p}(2^{i-p}-1)^k$

    解释:

    • (jp)\binom{j}{p}:选点的方案系数,从 jj 个点中钦定 pp 个。
    • (2ip1)k(2^{i-p}-1)^k:连边的方案系数,kk 个点中的每个与 ipi-p 个未被钦定的点至少连一条边。

    至此 DP 转移完毕,考虑统计答案,如果二元组恰为 (x,y=x+1)(x,y=x+1),则可以有点需要下一个状态连边,仅按方式二来满足最短路,这样的点可以以同类连边的方式消化掉,设二元组 (x,x+1)(x,x+1) 的点总共有 ss 个,贡献为:

    i=0sTs,ifx,x+1,i\sum_{i=0}^sT_{s,i}f_{x,x+1,i}

    解释:Ts,iT_{s,i}:大小为 ss 的二元组集合中 ii 个点会通过同类连边消化掉的方案。


    预处理 Ti,jT_{i,j},可以使用容斥,钦定有 kk 个点度数为 00

    $T_{i,j}=\sum_{k=0}^j(-1)^k\binom{j}{k}2^{\frac{(i-k)(i-k+1)}{2}}$

    解释:

    • (1)k(jk)(-1)^k\binom{j}{k}:容斥系数和钦定选点的方案系数
    • 2(ik)(ik+1)22^{\frac{(i-k)(i-k+1)}{2}}:除去钦定的 kk 个点随意连边的方案数。

    如果二元组不为 (x,x+1y)(x,x+1\neq y),则不能有点需要下一个状态连边,贡献为 fx,y,0f_{x,y,0}

    把上述的公式拼起来就是一份代码了。

    注意由于奇偶最短路最长可能出现 2n2n,涉及到二元组的数组及清空要开两倍。

    Upd:修了公式里的小问题和语言表述,并补充了代码。

    Upd:修了一下代码,将公式中的表述和代码中的变量整理统一了一下。

    Upd:补充解释。

    Upd:修改了之前不规范的地方。

    • 1

    信息

    ID
    6538
    时间
    1000ms
    内存
    250MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者