ZJOI2018 树

ZJOI2018 树

给定 \(n,k\),按照如下规则生成随机树:

  • 对于 \(i\ge 2\)\(i\) 的父亲 \([1,i)\) 中随机。

求生成 \(k\) 棵树全部同构的概率。

\(n\le 2000,k\le 10^9\)

Solution

首先我们将所有大小为 \(n\) 的等价类进行标号,设分别有 \(1\sim m\) 个,设其大小为 \(a_1\sim a_m\),则可知题意需要求的为:

\[\frac{1}{((n-1)!)^k}\sum_{i=1}^m a_i^k \]

我们不妨设 \(dp_n\) 表示 \(\sum_{i=1}^m a_i^k\)

考虑计算 \(dp_n\),事实上他存在另一个组合解释,即所有树生成概率相同,随机 D \(k\) 次,D 出来的树均相同的概率。

我们考虑将根节点拿去,转为考虑森林的情况,区别于传统计数问题,我们无法轻易的计算答案,因为此处的森林是无序的。

我们考虑按照此规则生成森林:

  • 每次将最大的一批树拿去,然后转为 sub-problem

不妨设 \(tmp_{i,j}\) 表示当前所有树的大小均不超过 \(i\),所有树的大小之和为 \(j\) 的情况下的贡献。

那么 \(dp_{i}=tmp_{i-1,i-1}\)

我们枚举大小为 \(i\) 的树的数量(显然因为同构内部需要相同)由于是无标号同构判定,我们给其任意的分配标号(注意有 \(k\) 轮):

\[tmp_{i,j}=\sum_{i\times u+v=j}tmp_{i-1,v}\times f_{i,u}\binom{j}{i\times u}^k \]

只需要计算 \(f_{i,u}\) 表示仅由 \(u\) 棵大小为 \(i\) 的树组成的森林对答案的贡献之和。

这里需要注意的一点是,答案是无标号的,我们先来形式化的描述一下这个问题:

考虑这 \(u\) 棵树可以描述为 \(u\) 个元素构成的序列,设大小为 \(i\) 的树有 \(m\) 个等价类,大小分别为 \(a_1\sim a_m\),我们考虑答案可以描述为:

  • 长度为 \(u\) 的序列,每个元素在 \([1,m]\) 中穷举,统计本质不同的序列的贡献之和,其中序列的贡献分成两个 Part,其一为标号的分配,其二为 \(a_i\) 的乘积。

我们先考虑标号的分配:我们现在有 \(i\times u\) 个标号,考虑分配标号的时候,看起来答案似乎就是:\(\binom{i\times u}{i,i,i,...i}\)

然而并不是,我们需要注意到假设两棵树同构,在此标号分配意义下会被判定为不同构。

换而言之同构的树,或者说相同的颜色,彼此之间的排布顺序应当是无序的,于是设第 \(i\) 种等价类出现了 \(c_i\) 次,答案应当为 \(\binom{i\times u}{i,i,i...,i}\frac{1}{(c_j)!}\)

于是外部的贡献为 \(\frac{(iu)!}{(i!)^u}\),此时需要注意到这类贡献会产生 \(k\) 次,于是标号分配处的贡献为 \(\frac{(iu)!^{k}}{i^{uk}}\)

我们将一个长度为 \(u\) 的序列设为元素 \(x\),并考虑通过群论的语言来描述答案,设 \(x\) 的轨道为 \(orbit(x)\),并为每个 \(x\)\(\omega(x)=\frac{1}{\prod c_i!}\),则答案为:

\[\frac{(iu)^k}{i^{uk}}\sum_{x\in m^u}\prod a_i^k \omega(x)\frac{1}{orbit(x)} \]

由于每个元素附带了额外的权值,我们无法通过传统的 Polya/Burnside 定理来计算答案,我们考虑拓展 Burnside 定理:

考虑为每个置换赋予权值 \(w(p)\),并基于如下构造,设 \(fix(p)\) 表示置换 \(p\) 意义下的不动点集,我们使得:

\[\sum_{x\in fix(p)}\frac{w(p)}{G}=\frac{\omega(x)}{orbit(x)} \]

成立,则答案可以描述为:(其中 \(G\) 为群的大小即 \(u!\)(不过在不确定的情况下可以设))

\[\frac{(iu)^k}{i^{uk}}\sum_{x\in m^u}\prod a_i^k \sum_{x\in fix(p)}w(p) \]

忽略前面的部分,答案转为:

\[\sum_{p\in u!}w(p)\sum_{x\in fix(p)}\prod a_i^k \]

显然,我们有观察,每个轮换的贡献是独立可乘的。那么对于每个轮换,设其大小为 \(\rho_j\),答案可以描述为:

\[\frac{1}{G}\sum_{p\in u!}w(p)\prod_{\rho_1+\rho_2+...=p} \bigg(\sum a_i^{\rho_jk}\bigg) \]

事实是,第二个 Part 的式子我们从来没有计算过,此时我们需要扩充我们预处理的信息量,令:

\(dp_{i,o}\) 表示所有大小为 \(i\) 的树的等价类的 \(\sum a_i^{jk}\) 之和,则此时我们需要预先修正我们所有的计算式:

  1. 我们引入 \(tmp_{i,j,o}\) 并为此有:

\[tmp_{i,j,o}=\sum_{iu+v=j}tmp_{i-1,v,o}\times f_{i,u,o}\binom{j}{iu}^{ok} \]

  1. 我们修正 \(f_{i,u,o}\) 的计算式:

\[f_{i,u,o}=\frac{(iu)^{ok}}{i^{ouk}}\sum_{x\in m^u}\prod a_i^{ok} \omega(x)\frac{1}{orbit(x)} \]

其中 \(\omega(x)=\frac{1}{\prod (c_j)!^{o}}\),类似的,我们可以为每个 \(o\) 构造 \(w(p)\)

考虑计算式:

\[f_{i,u,o}=\frac{(iu)^{ok}}{i^{ouk}}\times \frac{1}{G}\sum_{p\in u!}w(p)\prod_{\rho_1+\rho_2+...=p} \bigg(\sum a_i^{\rho_jok}\bigg) \]

\[f_{i,u,o}=\frac{(iu)^{ok}}{i^{ouk}}\times \frac{1}{G}\sum_{p\in u!}w(p)\prod_{\rho_1+\rho_2+...=p} dp_{i,\rho_jo} \]

  • 注意 \(dp_{i,o}=tmp_{i-1,i-1,o}\)

不失一般性,我们考虑到 \(p\) 可以拆分为若干个轮换的和,我们不妨将 \(w(p)\) 定义为 \(\prod w(\rho_i)\)

则此时有:

\[\sum_{x\in fix(p)}\frac{w(p)}{G}=\frac{\omega(x)}{orbit(x)} \]

考虑什么情况下 \(p\)\(x\) 的不动点,显然可以将每个颜色拆开考虑,设第 \(i\) 种颜色数量为 \(c_i\),我们设 \(F_{x}\) 表示某种颜色有 \(x\) 个时的贡献,则此时有:

\[\frac{1}{G}\prod_{i=1}^mF_{c_i}=\frac{1}{u!}\times \frac{1}{\prod (c_j!)^{ok-1}} \]

于是有:(\(G=u!\)

\[F_{c_i}=\frac{1}{c_j!^{ok-1}} \]

考虑到对置换的处理通常是枚举轮换,设大小为 \(i\) 的轮换有 \(t_i\) 个,则其对答案的贡献为 \(\frac{1}{t_i!i^{t_i}}\)(后面的贡献来自 \(\frac{(i-1)!}{i!}\)):

\[F_{x}=x!\sum_{i\times t_i=x}\frac{w(i)^{t_i}}{i^{t_i}(t_i)!}=\frac{1}{x!^{ok-1}} \]

\[\sum_{i\times t_i=x}\frac{w(i)^{t_i}}{i^{t_i}(t_i)!}=\frac{1}{x!^{ok}} \]

我们设 \(F_i(x)=\sum \frac{w(i)^jx^{ij}}{i^jj!}\),设 \(G_i(x)=\frac{w(i)x^i}{i}\),则 \(F_i(x)=e^{G_i(x)}\)

方便起见将之前的 \(x\) 统一改为 \(n\) 并用 \(x\) 代表形式幂级数,故有:

\[\prod F_i(x)[x^n]=\frac{1}{n!^{ok}} \]

\(G(x)=\sum G_i(x)\) 即:

\[\exp(G(x))[x^n]=\frac{1}{n!^{ok}} \]

\(H(x)=\sum \frac{x^i}{i^{ok}}\),则 \(G(x)=\ln H(x)\)

此时,我们得到了每个轮换的 \(w(\rho)\)

接下来我们考虑计算 \(f_{i,u,o}\),根据转移有:

\[f_{i,u,o}=\frac{(iu!)^{ok}}{i!^{ouk}}\times \frac{1}{u!}\sum_{p\in u!}w(p)\prod_{\rho_1+\rho_2+...=p} dp_{i,\rho_jo} \]

我们考虑拆分后式,平凡的,我们枚举每个置换的大小并考虑大小为 \(i\) 的置换被使用了 \(t_i\) 次,则有:

\[f_{i,u,o}=\frac{(iu!)^{ok}}{i!^{ouk}}\times \frac{u!}{u!}\prod_{j\times t_j=u}\frac{w_o(j)dp_{i,jo}^{t_j}}{t_j!j^{t_j}} \]

类似的,设 \(G_i(x)=\frac{w_o(j)dp_{i,jo}x^j}{j}\),则 \(e^{G_i}\) 可以表达单个后式,后式即 \(\prod e^{G_i(x)}=e^{G(x)}\),其中 \(G(x)=\sum \frac{w_o(j)dp_{i,j}x^j}{j}\)


我们有边界 \(tmp_{1,?,?}=1\),且有转移:

  • \(dp_{i,o}=tmp_{i-1,i-1,o}\)
  • 需要求得 \(dp_{n,1}\)
  • 计算 \(tmp_{i,j,o}\)

\[tmp_{i,j,o}=\sum_{iu+v=j}tmp_{i-1,v,o}\times f_{i,u,o}\binom{j}{iu}^{ok} \]

  • 计算 \(f_{i,u,o}\)
  • 对于某个 \(o\) 预处理 \(w_o(i)\) 依此:

\(H(x)=\sum \frac{x^i}{i!^{ok}}\),则 \(G(x)=\ln H(x)\),其中 \(G(x)[x^i]=\frac{w_o(i)}{i}\)

  • 转移 \(f_{i,u,o}\)

\(G_{i,o}(x)=\sum_j \frac{w_o(j)dp_{i,jo}x^j}{j}\),则 \(f_{i,u,o}=\frac{(iu!)^{ok}}{i!^{ouk}}\times \exp(G_{i,o}(x))[x^u]\)

最后,我们需要知道那些状态是有效的:

考虑到 \(f_{i,u,o}\) 满足 \(iu\le n\),同时计算其需要知道 \(dp_{i,uo}\) 对应着需要知道 \(f_{i-1,\frac{n}{i-1},uo}\)

对于 \(f(i,u,o)\) 会计算 \(dp(i,o\sim uo)\)

对于 \(dp(i,o)\) 会计算 \(f(i',j',o)\) 且有 \(i'j'\le i\)

显然三个维度的乘积始终小于 \(n\)

至此,我们计算 \(tmp\) 的复杂度为:

\[\sum \frac{n^2}{i}=n^2\log n \]

我们计算 \(f\) 数组的复杂度为:

\[\sum_{i,j}\frac{n^2}{(ij)^2}=n^2 \]

我们计算 \(w_o(i)\) 的复杂度为:

\[\sum \frac{n^2}{i^2}=n^2 \]

总体复杂度 \(\mathcal O(n^2\log n)\)

tips:

暴力 \(\ln\)

\[B_n=A_n-\frac{1}{n}\sum_{i=1}^{n-1} B_i\times i\times A_{n-i} \]

暴力 \(\exp\)

\[[z^{n}]B(z)=\frac{1}{n}\sum_{k=1} k[z^{k}]A(z)\times B(z)[z^{n-k}] \]

posted @ 2021-02-02 08:28  Soulist  阅读(264)  评论(2编辑  收藏  举报