光之大陆

光之大陆

题意翻译

给定 \(n\) 个点,将它们分成几个部分,使得每个部分构成一个简单环,在这些环之间连边,使其构成一颗生成树,环上无重边,问方案数。

\(n\le 200\)

思路

考虑本题的两个过程:

  1. 首先求解将 \(n\) 个点分成 \(i\) 个部分的方案数,这可以用 DP 解决。令 \(f[i][j]\) 表示将前 \(i\) 个点分成 \(j\) 个部分的方案数。转移,考虑有 \(k\) 个点和 \(i\) 号点在一个集合,则可以从 \(f[i-k][j-1]\) 转移(当然需要保证至少有 \(j\) 个集合,所以 \(\max k\)\(i-(j-1)=i-j+1\)),考虑从 \(i-1\) 个点中任选 \(k-1\) 个与 \(i\) 一组,然后再考虑这一组的排列方式,发现是一个圆排列,方案数为 \(\dfrac{k!}{2k}\),表示排列后方向(顺时针逆时针 \(\div 2\))、旋转同构(最小表示法的一定的若干个排列 \(\div k\)),但要考虑连出去的点是什么,\(\times k=\dfrac{k!}{2}\),注意一个点只有一种方案,且两个点无法构成环,没有方案(因为这样会导致重边)。转移为 \(f[i][j]+=f[i-k][j-1]\times\dfrac{k!}{2}\times C_{i-1}^{k-1}\),可以预处理组合数和圆排列,预处理时特殊处理 \(k=1/2\) 的情况。
  2. 确定分成几个部分后,考虑几个环构成一颗生成树的方案数。设有 \(m\) 个环(与题目中的 \(m\) 无关)可以转换成有 \(m-2\) 个位置的 prufer 序列。发现由于是环,所以环与环之间连环上的哪些点的边是无所谓的,共 \(n^{m-2}\)

结果就是 \(\sum_{i=2}^nf[n][i]\times n^{i-2}+\dfrac{n!}{2n}\),后者为特判 \(i=1\),因为此时不在乎连出去的点,所以方案数无需 \(\times k\)

复杂度 \(O(n^3)\)

code

posted @ 2023-07-28 15:32  wscqwq  阅读(9)  评论(0编辑  收藏  举报