1 条题解
-
0
图的代价 题解
思路
令 。一次选择 会加入 条 gcd 为 的边,代价为 。因此总成本等于边数 加上操作次数;问题转化为在各种可用的“边数包”中,凑出恰好 ,并最小化包的数量。
设 为 gcd 恰好等于 的无序点对数,则大小为 的包最多使用 次。
三个算法层级分别是:
- 时枚举点对得到 ,再做有界背包求最少包数。
- 时仍枚举所有点对统计 ,但利用包大小连续且单位边代价随 下降,按 从大到小贪心。
- 满规模时用欧拉函数前缀快速求 ,再执行同样的贪心。
做法
把一对 gcd 为 的点同时除以 ,得到 且 。固定较大的数 时,较小且互质的 有 个,所以
预处理欧拉函数及其前缀和即可在 时间得到每个 。
从最大的 向 扫描。大小为 的包最多有 个,当前还需要 条边时取
个包,并把答案增加 。较大的包用一次能覆盖更多边,因而不可能比用更小的包需要更多操作;所有包大小从 连续出现,剩余量最终由更小包补齐。若扫描结束仍有剩余边,则无解。
所有计数、 与答案必须使用 64 位整数。
复杂度
预处理到最大 的欧拉函数为 ,每组扫描 ,总时间 ,空间 。
- 1
信息
- ID
- 1191
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者