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