1 条题解
-
0
自动搬运
来自洛谷,原作者为

MatrixCascade
青箔镜中朱颜改,去年今日桃花红。搬运于
2025-08-24 22:22:52,当前版本为作者最后更新于2022-08-06 02:23:55,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
没意思的缝合怪。
Subtask1 直接暴力 dfs,好像还得剪枝不然过不去。
Subtask2 直接状压 dp,设 表示 i 这个状态中的所有小孩用了正好 j 种玩具的方案数,预处理出 表示 这个集合里面可以用同一种玩具, 转移的时候使用子集枚举加速即可,虽然查询中的玩具总数会很多,但是你最多用到 种。 数组预处理出来,查询再加个组合数即可。
Subtask3 是边数很小,这提示我们用边数相关的做法。直接枚举 钦定 集合里面的边强制同种颜色的方案数,答案就是 , 是连通块个数,于是你只要把连通块个数为 的系数预处理出来就行了,每次查询就是 的。
注意预处理的实现要精细一点,可以用 dfs 枚举状态+可撤销并查集。如果实现不好很容易被卡常。
Subtask4 不难发现是形成若干个环,但是你只需要考虑环的长度即可。然后就有一个用烂了的套路是本质不同的环的个数只有 个,把同类环合并就可以了。
在考虑如何求 (n 个点的环用 k 种颜色的方案数,相邻不同色)先看看这个东西能不能递推。考虑枚举第一个点和第 个点颜色是否一样,如果颜色一样,那么首先 号点有 种取值,然后你可以把 合并起来看成一个点,剩下的就为 ; 如果颜色不一样,那么 号点有 种取值,然后你可以把 号点扔掉,就变成了 。 (因为你强制了 1 号不等于 n-1 号)
于是就有了递推式 : 。
发现是只与前两项有关的递推 ! 解一下特征方程就可以得到 。
再加上本质不同的环合并,每次查询就可以在 时间下完成。
- 1
信息
- ID
- 5719
- 时间
- 1500ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者