1 条题解

  • 0
    @ 2025-8-24 22:50:31

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar cyffff
    Not yet for the story on the last page, it's not the end.

    搬运于2025-08-24 22:50:31,当前版本为作者最后更新于2024-02-17 08:16:53,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    Link\text{Link}

    题意

    给定一颗叶向树,求所有合法拓扑序 ppi=2npipi1\sum_{i=2}^n|p_i-p_{i-1}| 之和,对 109+710^9+7 取模。

    n200n\le200

    思路

    考虑求一颗树的拓扑序数量,定义 gxg_xxx 子树内拓扑序的数量,szxsz_xxx 子树大小。考虑 xx 不同子树之间无限制,而 xx 必须摆在第一位,显然有

    $$g_x=\binom{sz_x-1}{sz_{t_1},sz_{t_2},\dots,sz_{t_k}}\prod_{i=1}^kg_{t_i} $$

    其中 t1kt_{1\sim k}xx 的儿子,多重组合数 (ns1,s2,.sk)\binom{n}{s_1,s_2,\dots.s_k} 意义为把 nn 个数划分成 kk 个大小给定集合的方案数。

    根据此式,我们可以算出 reduce(x,p1,)\text{reduce}(x,p_1,\dots) 表示求 xx 子树去掉 p1,p_1,\dots 子树后合法拓扑序数量,其中 p1kp_{1\sim k} 均为 xx 的儿子,此函数时间复杂度为 O(k)O(k),预处理 gxg_x 逆元即可。

    考虑枚举 a,ba,b,计算它们在所有合法拓扑序中相邻的次数。

    • a,ba,b 有祖先后代关系。那么此时 aa 一定是 bb 的父亲,考虑 aa 子树内所有拓扑序,那么 bb 一定在第二位,方案数为 $\text{reduce}(a,b)\cdot\binom{sz_a-2}{sz_b-1}\cdot g_b$。
    • a,ba,b 无祖先后代关系。设 c=LCA(a,b)c=\text{LCA}(a,b)a,ba',b' 分别为 cca,ba,b 方向的儿子。由于 a,ba,b 相邻,不妨先把 a,ba,b 子树拓扑序合并,方案数为 (sza+szb2sza1)gagb\binom{sz_a+sz_b-2}{sz_a-1}\cdot g_ag_b。考虑令 f(u,v)f(u,v) 表示 u,vu,v 子树拓扑序拼起来有几个是 a,ba,b 相邻的,则 $f(fa_u,v)\gets f(u,v)\cdot\text{reduce}(fa_u,u)\cdot\binom{sz_{fa_u}+sz_v-2}{sz_u+sz_v-1}$,f(u,v)f(u,fav)f(u,v)\to f(u,fa_v) 同理。最后 cc 子树内 a,ba,b 相邻方案数就是 $f(a',b')\cdot\text{reduce}(c,a',b')\cdot\binom{c-2}{sz_{a'}+sz_{b'}-1}$。

    子树内方案数容易推至全树方案数,总时间复杂度 O(n4)O(n^4)

    考虑 a,ba,bff 转移式中无体现,考虑令原来 a,ba,b 时的 f(u,v)f(u,v) 记作 f(a,b,u,v)f'(a,b,u,v),新定义 f(u,v)f(u,v)aSubSvabf(a,b,u,v)\sum_{a\in S_u}\sum_{b\in S_v}|a-b|f'(a,b,u,v),转移式不变,在 fau=favfa_u=fa_v 时统计贡献,注意不能转移至 u,vu,v 有祖先后代关系的状态。子树方案数也可加起来一起推至全树,总时间复杂度 O(n2)O(n^2)

    • 1

    信息

    ID
    9239
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者