光之大陆

光之大陆

题意翻译

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

n200

思路

考虑本题的两个过程:

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

结果就是 i=2nf[n][i]×ni2+n!2n,后者为特判 i=1,因为此时不在乎连出去的点,所以方案数无需 ×k

复杂度 O(n3)

code

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17587761.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起