首页 > 其他分享 >【专题】析合树计数

【专题】析合树计数

时间:2023-06-23 15:34:10浏览次数:32  
标签:专题 limits sum 儿子 计数 连续 析合树 节点

【专题】析合树计数

djwj233 析合树 学习笔记

rzO_KQP_Orz 析合树形态计数 dp

析合树

子段:连续子序列

非平凡子段:长度 \(\in [2, n - 1]\) 的子段

连续段:排序后值域连续的子段

令 \(I_U\) 表示 \(U\) 的所有连续段。

本原连续段:若没有其他 \(I_U\) 内的连续段与当前连续段相交,则当前连续段称作本原连续段。

用一个连续段 \(x\) 代表一个节点 \(u\),将 \(x\) 分成若干个非自身本原连续段,记作 儿子段,对应 \(u\) 连向若干个子节点。

这些子节点都对应一段连续值域,按值域给子节点赋排名 \(p_i\),被称为 儿子排列

定义 \(x\) 的 完整子段 表示非自身、非其儿子段、完全包含某些儿子段(不会把儿子段分裂)的子段。

下面是对当前 \(x\) 的分类:

\(x\) 是 合点:\(p\) 是顺序或逆序,即 \(x\) 的任意完整子段都是连续段。

\(x\) 是 析点:即非合点,此时有 \(x\) 的任意完整子段都不是连续段。易知 析点的子节点数量至少为 \(4\)

CF1089I Interval-Free Permutations

洛谷:CF1089I Interval-Free Permutations

Codeforces:CF1089I Interval-Free Permutations

Problem

给您一个模数 \(p\) 和 \(n\),请您输出长度为 \(n\) 同时不包含非平凡连续段的排列方案总数。\(n \le 400, T \le 400\)。

Solution

析合树计数:

  • 根为析点
  • 根的儿子均为叶节点,即 \(n\) 个叶节点

记 \(f_n\) 表示长为 \(n\) 的排列的答案。

正难则反,\(f_n = n! - 根为合点的数量 - 根为析点且其儿子数 \in [4, n - 1] 的数量\)。

  • 根为合点

    先假设儿子排列为顺序,逆序情况与顺序方案数相同。

    枚举第一个儿子的值域范围为 \([1, i]\),统计这样的儿子数量,记为 \(g_i\)。

    由本原连续段的限制,该儿子首先得是包含 \(1, 2, \cdots, i\) 各一次的连续段,其次其任意长为 \(j(0 < j < i)\) 的前缀不能填满值域 \([1, j]\)。

    容斥,

    \[g_n = n! - \sum\limits_{i = 1}^{n - 1}g_i(n - i)! \]

    根为合点的总方案数为:

    \[2\sum\limits_{i = 1}^{n - 1}g_i(n - i)! \]

  • 根为析点且其儿子数 \(\in [4, n - 1]\)

    枚举儿子数 \(i\),把 \(n\) 个节点分配到 \(i\) 个儿子中后再乘 \(f_i\)。

    设 \(h_{i, j}\) 表示把 \(j\) 个节点分配到 \(i\) 个儿子中的方案数。小毬放盒问题,盒无编号,小毬在盒内要排序。

    \[h_{i, j} = \sum\limits_{k = 1}^{j}h_{i - 1, j - k}\times k! \]

    则该情况的方案数为

    \[\sum\limits_{i = 4}^{n - 1}h_{n, i}\times f_i \]

    上式是因为不论是单个节点还是打包成盒子,其本质都是儿子排列,所以可以直接把之前的 \(f_i\) 拖过来算。

\[f_n = n! - 2\sum\limits_{i = 1}^{n - 1}g_i(n - i)! - \sum\limits_{i = 4}^{n - 1}h_{n, i}\times f_i \]

\(O(n^3)\)。

code CF1089I Interval-Free Permutations

LOJ6632 Mysterious … Host

LOJ6632 Mysterious … Host

Problem

求本质不同的 \(n\) 阶析合树数量。\(n \le 5000\)。

本质不同即为在原排列上存在一段区间使得二者一个连续,一个不连续。

Solution

记 \(f_n\) 为本质不同的 \(n\) 阶析合树数量。

记 \(g_{n, i}\) 表示把长为 \(n\) 的排列分成 \(i\) 个连续段的本质不同的析合树数量。

\[g_{n, i} = \sum\limits_{j = 1}^{n}g_{n - j, i - 1}\times f_{j} \]

(看了好一会儿最后一项...其实最后一项没有用的)

转移时,要对当前根节点为合点还是析点进行分类讨论,因为二者对应的若干完整子段连续性相反。

若为合点,需满足儿子数量至少为 \(2\),贡献 \(\sum\limits_{i = 2}^{n}g_{n, i}\)。

若为析点,需满足儿子数量至少为 \(4\),贡献 \(\sum\limits_{i = 4}^{n}g_{n, i}\)。

不论是合点还是析点,都可以有安排值域的方法取遍上述和式的所有情况。

\[f_n = \sum\limits_{i = 2}^{n}g_{n, i} + \sum\limits_{i = 4}^{n}g_{n, i} \]

直接转移的时间复杂度是 \(O(n^3)\) 的。发现两部分非常相似,不妨设 \(h_{n} = \sum\limits_{i = 2}^{n}g_{n, i}\),则

\[f_{n} = 2h_{n} - g_{n, 2} - g_{n, 3} \]

这样就没必要 \(O(n^3)\) 求出 \(g\) 的所有值了,只需要求出 \(h_{n}, g_{n, 2}, g_{n, 3}\) 即可。其中 \(h_{n}\) 将 \(g_{n, i}\) 的式子代入即可得到递推式:

\[h_n = \sum\limits_{i = 1}^{n - 1}f_{n - i}(h_i + f_i) \]

转移的时候注意 \(g_{n, 1}\) 就是 \(f_{n}\)。

code LOJ6632 Mysterious … Host

标签:专题,limits,sum,儿子,计数,连续,析合树,节点
From: https://www.cnblogs.com/Schucking-Sattin/p/17499206.html

相关文章

  • 数据结构专题 6.23西安集训
    [AGC015E]Mr.AokiIncubator假设时间无限大,那么所有点的位置顺序就是他们的速度顺序。也就是说,把他们按照速度排序,这个顺序就是最终顺序。对于两个点$i$,$j$,如果v_{}^{i}>v_{}^{j}&&x_{}^{i}<x_{}^{j},或 v_{}^{i}<v_{}^{j}&&x_{}^{i}>x_{}^{j},i就可以染j。进一步观......
  • 【杂题乱写】6 月西安多校 DP 专题训练
    这也太难了!这也太难了!这也太难了!AUOJ-607UR#20跳蚤电话加点操作太抽象,改成删点,每次可以删一个叶子,或者删一个只有一个父亲和一个儿子的节点。算方案还带顺序,子树间再算多重集组合数不方便,不如直接算任意顺序删点最后合法删完的概率。设\(f_u\)为按任意顺序删点删完\(u\)......
  • Python学习笔记专题目录
    转载请注明来源:http://www.eword.name/Author:ewordEmail:eword@eword.namePython学习笔记专题目录首页Python学习笔记MacBook搭建python开发环境【必须】安装Python【必须】安装pip【必须】virtualenv的安装和使用【推荐】安装PyCharm【推荐】Pycharm虚拟环境......
  • leetcode 338. 比特位计数
    338.比特位计数难度简单1216给你一个整数 n ,对于 0<=i<=n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n+1 的数组 ans 作为答案。示例1:输入:n=2输出:[0,1,1]解释:0-->01-->12-->10示例2:输入:n=5输出:[0,1,1,2,1,2]解释:0-......
  • SpringBoot - jackson 序列化配置,支持jdk8 时间类型和解决科学计数法
    jdk8时间序列化配置#Copy@ConfigurationpublicclassJacksonConfig{@BeanpublicObjectMapperserializingObjectMapper(){JavaTimeModulejavaTimeModule=newJavaTimeModule();/**序列化配置,针对java8时间**/javaTimeModule.add......
  • unix 计数器disk traffic含义补充
    LoadRunnerController菜单tools–>options中我们可以看到是3秒钟采集一次服务器的资源信息,如下图所示:这就等价于以下命令:iostat–d3n 输出的tps或者iostat–x3中的r/s+w/s iostat–d3n的输出类似如下:#iostat-d3nLinux2.6.18-194.el5(www2.×××.c......
  • 【专题】2022年中国跨境电商行业研究报告PDF合集分享(附原数据表)
    全文链接:http://tecdat.cn/?p=32044近年来,我国的跨境电子商务发展迅速,在过去五年中,其贸易额增长率达到了16.2%,已经成为稳定对外贸易的一支重要力量(查看文末了解报告PDF版本免费获取方式)。一方面,随着跨境电子商务的发展,跨境电子商务的监管政策得到了进一步的改善,跨境电子商务的规......
  • 【Java技术专题】「攻破技术盲区」带你攻破你很可能存在的Java技术盲点之动态性技术原
    @目录带你攻破你很可能存在的Java技术盲点之动态性技术原理指南编程语言的类型静态类型语言动态类型语言技术核心方向反射API反射案例介绍反射功能操作获取构造器长度可变的参数-构造方法使用反射API获取参数长度可变的构造方法获取Field域使用反射API获取和使用静态域和实......
  • Java乐观锁实现文章点击量、收藏计数、点赞计数
    Java乐观锁实现文章点击量、收藏计数、点赞计数......
  • 史上最全Hadoop面试题:尼恩大数据面试宝典专题1
    文章且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪酬猛......