学习笔记--APIO 2018 二分专题 By wuvin

Posted Rye_Catcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学习笔记--APIO 2018 二分专题 By wuvin相关的知识,希望对你有一定的参考价值。

前言:

在APIO 2018 Day2下午听wuvin讲二分,听了一上午的神仙,现在终于有可以听懂了。

专题:

  1. 平均边权最大

    • 题目链接:https://www.questoj.cn/problem/34

    • 题解 by wuvin:

      二分平均值

      然后每条边减去平均值
      变为查找是否存在正环

      可以使用SPFA(反着写松弛)

  2. 最大闭合权子图变式

    • 题意:

      一个N个点M条边的图(不一定连通)。

      一个子图的优美程度定义为子图中的边数/子图的点数

      现在你需要求出最大能得到的优美程度是多少?

    • 题解by wuvin:

      照套路我们二分一下

      然后点带负权,边带正权

      选择边必须选择点

      变成最大权闭合子图,上网络流解决

    然而我并不会网络流求这个...

  3. 带权二分系列

    1. BZOJ 2654

      • 题目链接:
        https://www.lydsy.com/JudgeOnline/problem.php?id=2654

      • 题解by wuvin:

        如果我们对所有白色边的边权增加\(M*maxW\),那么最小生成树会得到一个白色边尽量少的方案。

        如果我们对所有白色边的边权增加\(-M*maxW\),那么最小生成树会得到一个白色边尽量多的方案。

        我们定义这个给白色边的额外权值为C。随着C从小到大遍历\([-M \times maxW,M \times maxW]\),那么我们的最优方案中的白色边会逐渐减少。

        如果某个C下,我们最优方案刚好得到K条边,那么这就是原题的最优解。因为最终代价为 原题的最优解+\(C*K\) 其中K和C都是常数,所以说最优解和原题是同一个最优解。

        所以我们可以二分C值,然后使用\(kruskal\)生成树即可。(假设白色边和黑色代价一样的时候选择白色边)

        但是注意一个细节,随着C的增加,白色边边数只是单调不增而已,可能出现C=1是得到5条白色边,C=1+eps是就是3条白色边,这是因为可能存在可以代替白色边的权值刚好之比白色边大1的黑色边。

        所以二分到最后需要特判一下。

    2. APIO 2014

      • 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3675

      • 题解by wuvin:

        Ans = C – 每一段内任意两个数的两两的乘积之和

        \(Ans=C-minimize(\sum_{i \in [li,ri]}\sum_{j \in [li,ri]} {Wi \times Wj})\)

        传统做法O(NK)的斜率DP

        我们来参数二分 —— 给每次划分附上一个额外的代价C。

        \(C= +∞\)时,答案是只分一段。
        \(C=0\)时,答案是每个数割一刀,分成n段。

        分的段数随着C的增长而减少
        于是可以采用刚刚类似的二分方法。

        二分之后就是正常的斜率DP了。
        最终复杂度 \(O(nlogV)\)

      • 相似:

        SDOI2016 征途






以上是关于学习笔记--APIO 2018 二分专题 By wuvin的主要内容,如果未能解决你的问题,请参考以下文章

APIO2018 被屠记

[APIO2018] New Home 新家 [线段树,multiset]

2018-1-22 Linux学习笔记

「APIO2014」回文串 (二分+hash)

MATLAB学习笔记-专题一知识点总结

Building Worlds In Unreal 学习笔记——15-19 高度图地形专题&地形自动材质专题