AGC028C Min Cost Cycle
题意:给出一张
对于
求图的最短哈密顿环。
处理最优化问题的一类巧妙手段:
- 将解集的约束简化,只考虑必要条件。
- 这会导致解集冗余化,但我们可以证明冗余的解都不是最优解。
有时只是灵机一动减少细节,有时则成为解题的关键。
如何简化约束?难点有两方面,一是“简化”只能产生更差的冗余解;二是“简化”要足够强,足以使得我们能得到好做法。
一般来说,第一点比较直接,通过分析问题本身的性质就能处理;第二点则比较迂回,要通过题目中的碎片信息,以及经验,猜想出转化后的形式。
本题题意较为简单,于是先从题目条件入手。
对于每个
对于一个给定的有贡献的集合
一个显然的必要条件是:对于每条边
若只考虑这个条件,会产生冗余的解(即在某条边处选了较大值而非较小值),但不难证明这些解都是不优的。
接下来考虑如何判定一个给定的
将
00,。 10,。 01,。 11,。
首先可以将所有的 10, 01
分别首尾相连,形成两条可以看做单个 10 或 01
的链。
若全为 10 或全为
01,则可以直接形成一个大环。
若存在 00 与 11,由
若没有 10 和 01,构造 00 +
11 + 00 + 11 (交替)。
若有 10 和 01,构造 10 +
11 + 01 + 00 + 11 +
00 + 11(交替)。
只剩下一种情况:不存在 00 和 11 (每对
10 和 01 混杂。此时 10 和
01 之间无法连边,无解。
得到了
将
若不合法,则将
若仍然不合法,则说明
此时考虑将
复杂度
总结:考察了最优化问题中“映射转化”、“冗余解集”两类经典技巧,且最终解法非常简洁,好题。