[AGC028C] Min Cost Cycle 题解


代码

这题首先要切换角度,对着这个哈密顿回路瞪没啥用,我们考虑转化成每一个点的贡献

我们任意挑选可行方案出来,发现每一个点 \(u\) (假设 \(from\) 连向它,它连向 \(to\))的贡献只有四种情况:

  • \(a_u<b_{to},b_u<a_{from}\),这个点选取 \(a_u\)\(b_u\) 都计入答案。
  • \(a_u<b_{to},b_u>a_{from}\),这个点选取 \(a_u\) 都计入答案。
  • \(a_u>b_{to},b_u<a_{from}\),这个点选取 \(b_u\) 都计入答案。
  • \(a_u>b_{to},b_u>a_{from}\),这个点 \(a_u\)\(b_u\) 都不计入答案。

同时满足:

  • 选取的数(\(a\) 被选的数量与 \(b\) 被选的数量之和)共计 \(n\) 个。

接下来我们从一个选取方案回推构图(哈密顿回路)方案。第一个想法是选取最小的 \(n\) 个数,但是这样是不对的,因为这样的选取方式不一定能对应一个方案。

我们看哈密顿回路中一条边的意义,为起点的 \(a\) 和终点的 \(b\) 选取较小的那个,这里我们可以采用一个技巧,把这个条件转化为起点的 \(a\) 和终点的 \(b\) 中选取且仅选取一个

为什么这样正确?我们观察这样造成的多出来的一系列本应该不合法方案,发现如果这条边如果取另一个数答案一定更优,也就是说这些方案虽然不合法但是一定不能成为答案,所以,无所谓啦。

后面就简单了。

给出结论,只有这三种方案存在对应方案:

  • 全选 \(a\)
  • 全选 \(b\)
  • 至少存在一个点 \(a\)\(b\) 都被选择

前两种显然,不证了。

第三种口胡一下。
我们把左边那列视为 \(a\),右边那列视为 \(b\),选取的数为正方形,未选取的数为圆形。
我们要连 \(n\) 条边,连成一个环,一条边必须连接一个取和一个不取。

如果一部分选 \(a\),一部分选 \(b\),那么任意一个选 \(a\) 的点和任意一个选 \(b\) 的点是连不起来的,这个图不可能连通,所以不行。

如果有 \(k\) 个都选,必然也有 \(k\) 个都不选,这里再分四种情况:

  • 全是都选或都不选

  • 都选 + 只选 \(a\)

  • 都选 + 只选 \(b\)
    和上一种本质一样。
    JYT7lV.png

  • 都选 + 只选 \(a\) + 只选 \(b\)
    JYTLmF.png

具体做法嘛。。前两个特判,后一种枚举一个强制两个都选,剩下所有数中的贪心选取最小的 \(n-2\) 个,因为其它点的选择是无所谓的。

这里先最小的 \(n\) 个全扔小根堆里,然后看每一个点强制双选的时候,它的 \(a\)\(b\) 有几个数是在小根堆里,记为 \(k\)\(k\) 只能是 \(0\)\(1\)\(2\),用 \(a\)\(b\) 中不在小根堆里的数之和加上小根堆中最小的 \(n-k\) 个数之和(这个可以预处理)更新答案。

posted @ 2020-04-22 10:25  ItzInstallB  阅读(199)  评论(0编辑  收藏  举报