个人思路:

一棵树也只有一个 \(a=-1\) 的点,所以可以把它看做一个点,但是要记录点的大小 \(sz_i\),即为这棵树的大小。如果本来就是一个点,那么大小为 \(1\)。

状态:\(dp_{i,j}\) 表示前 \(i\) 个点已确定,已产生 \(j\) 个连通块的方案数。

转移:\(dp_{i,j} = dp_{i-1,j-1} \times sz_i + dp{i-1,j} \times (n-sz_i)\)。

这个状态如果选择了后面的点,会直接影响后面的点的大小,不可做。

然后就不会了。

正解:

设 \(a=-1\) 的点共有 \(m\) 个。

\(k\) 个点 \(x_1,x_2,\dots ,x_k\) 构成一个环,有 \((k-1)! \times \prod\limits_{i=1}^k sz_{x_i}\) 种方案数,因为每个点下一个连接的点形成的排列有 \((k-1)!\) 种,而每个点中有 \(sz_i\) 种选择。

剩下的随便选,每种环在所有方案中出现了 \(n^{m-k}\) 次。那么这 \(k\) 个点构成的环对答案的贡献为 \((k-1)! \times \prod\limits_{i=1}^k sz_{x_i} \times n^{m-k}\)。

显然,我们可以把任选 \(k\) 个点的 \(sz_i\) 乘积之和算出来,可以 \(\Theta(n^2)\) 递推,具体看代码。

最新文章

  1. 数据库中数据DELETE了怎样恢复
  2. Java基础(一) ---- 封装(Encapsulation)
  3. C#开发Windows服务 附简单实例实现禁止QQ运行
  4. python问题:IndentationError:expected an indented block错误解决
  5. [ios][opengles]OpenGL ES基础知识简介
  6. 抓包工具__Windows
  7. 0基础学习ios开发笔记第一天
  8. Android新建项目手动添加Layout布局
  9. 纪念一下第一次写的django代码
  10. eclipes快捷键
  11. Win10系统Python虚拟环境安装
  12. C语言之free函数及野指针
  13. anylogic 使用
  14. [Swift]LeetCode467. 环绕字符串中唯一的子字符串 | Unique Substrings in Wraparound String
  15. Android内存优化之磁盘缓存
  16. saltstack常用命令
  17. Navicat http 通道增加验证
  18. How Region Split works in Hbase
  19. node学习系列 搭建express
  20. 机器学习进阶-案例实战-图像全景拼接-书籍SIFT特征点连接 1.cv2.drawMatches(对两个图像的关键点进行连线操作)

热门文章

  1. 迁移virtualenv虚拟环境,复制,免安装
  2. Java面向对象之创建对象内存分析
  3. 2022-05-23内部群每日三题-清辉PMP
  4. 虚拟机中 Linux 提示“设备上没有空间”,扩容磁盘
  5. centos7安装php8
  6. java实现读取json文件指定字段值
  7. PK获取面积
  8. win系统airtest+pytest-xdist服务器分布式运行。
  9. MacBook + 移动SSD实现三系统(Mac OS、windows、ubuntu)
  10. 学习笔记-Java面向对象