1 条题解
-
0
思路
把第 个人需要收到的 票看成 个带标签的目标槽位。先计算选民与这些槽位之间的完美匹配数,最后除以每个人的 ,就得到不区分同一收票人的槽位后的投票方式数。
对一个团队,设该团队有 位选民,其成员对应的目标槽位总数为 。该团队内部的所有边都是禁止边,构成一个 的完整二分图。
做法
使用容斥原理。对某个团队,恰好选择 条互不冲突的禁止边有
种方式,这些系数构成该团队的车多项式。不同团队的禁止边集合互不相交,因此把所有团队的车多项式相乘,得到系数 :从全部禁止边中选择 条互不冲突边的方案数。
固定这 条错误匹配后,剩下的 位选民和槽位可以任意匹配,共有 种。于是合法的带标签匹配数为
最后乘上 ,消除同一收票人的槽位标签。
小规模子任务可以直接枚举每位选民的收票人;中等规模子任务把槽位显式展开,用子集动态规划计算带标签匹配数,再除以阶乘。
正确性证明
每种原投票方式在给每个人的 张入票任意编号后,对应恰好 个带标签完美匹配,所以最终除以该乘积是正确的。
团队内部边恰好覆盖全部非法投票。车多项式系数精确统计了能够同时发生的 条非法边;对固定的这些边,剩余位置有 种匹配。容斥求和因此恰好删除所有至少包含一条非法边的匹配,只保留完全合法的匹配。团队之间没有共享的非法边块,多项式乘法恰好完成互不冲突边数的合并计数。
复杂度
所有团队多项式朴素卷积的总复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1365
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者