AGC012D Colorful Balls
题意:
可以执行下列两种操作:
选择两个颜色相同,且重量之和不超过
的球,交换他们的位置。 选择两个颜色不同,且重量之和不超过
的球,交换他们的位置。
求可以得到多少种不同的颜色序列。答案对
对于两个能够交换的球,连一条无向边。
对于一个联通块内的球,可以随便交换顺序,最终方案数即为颜色的多重排列。
这能得到一个显然的
考虑简化连边。
考虑最终形成联通块的形态,不难发现是一个大多色块和若干(没有贡献)的单色块。
(若有两个多色块,则必然能合成一个)
大多色块是由若干颜色的(按重量排序的)前缀组成的。
于是,最轻的球一定在大多色块中。
对于同色的球,只需要考虑最轻的球连出的边。
对于异色球,只需要考虑全局最轻的球连出的边,以及全局最轻球所在颜色能连出的最容易的边(即除掉这个颜色后的最轻球)。
这样,所需的边就是
适当地思考性质可以简化代码实现。