https://jzoj.net/senior/#main/show/3194

Problem
  • nn个点的每个点度数不超过44的无标号无根树个数.
Data constraint
  • 1n5001\le n\le 500
Solution
  • 尝试着把问题一般化。我们来考虑一个这样的问题:求nn个节点,每个节点度数不超过mm的无根树个数。

  • 为了解决这个问题,我们不妨先来解决有根树的情况。注意这里的树都是无标号的。所以每一种合法树的根的子树的sizesize都可以看做是单调的。然而无根树的计数实在很麻烦。例如在无根树中以下两种情况视作同一种:3194. 【HNOI模拟题】化学(无标号有根树、无根树计数)
    3194. 【HNOI模拟题】化学(无标号有根树、无根树计数)

  • 而在有根树情况下,这两种方案显然是不一样的。

  • 但注意,对于有根树这两种情况也是一样的:

3194. 【HNOI模拟题】化学(无标号有根树、无根树计数)
3194. 【HNOI模拟题】化学(无标号有根树、无根树计数)

  • 所以转化成有根树,我们可以更方便的进行DP。并且通过上面这两幅图我们发现唯一需要注意的是子树sizesize的关系。

  • 不妨令fi,jf_{i,j}表示当前根节点度为jj,总共有ii个节点时的方案数。此外,我们理应记录一下当前子树的最大sizesize,然后每次枚举个更大的sizesize去尝试着转移。但实质上我们可以不用记录,我们直接从小到大枚举这个sizesize,然后尝试转移.

  • 枚举当前最大子树的个数kk,令s=k=0m1f(size,k)s=\sum^{m−1}_{k=0}f(size,k),我们不难写出这样一个式子:f(i,j)=kf(isize×k,jk){s+k1k}f(i,j)=\sum_{k}f(i−size×k,j−k)\left\{ \begin{matrix}s+k-1\\k \end{matrix} \right\}

  • 其中{s+k1k}\left\{ \begin{matrix}s+k-1\\k \end{matrix} \right\}表示的是在ss个盒子中放kk个球,盒子不同,球相同,可以重复放的方案。这正好符合我们的要求。不难发现,我们这样枚举的sizesize一定可以保证子树是单调的,那么避免了算重。

  • 解决了有根树,我们现在来考虑无根树的问题。事实上,有一个极其巧妙且重要的性质:两颗无根树同构,则以它们重心为根的有根树同构

  • 那么我们就只需保证size(n1)>>1size\le (n-1)>>1即可。唯一需要注意的是,当一棵树有两个重心的时候,我们的sizesize都是小于n2\frac{n}{2}的,所以我们要特殊处理一下两个size=n2size=\frac{n}{2}的拼接,这也同样是一个组合数。

相关文章: