九省联考 2018 IIIDX

题意

给定一棵树,保证相同深度的点连续,你需要给每个点在 $v_i$ 中选取一个作为该点权值,且父亲的权值小于该点。

你需要最大化序列的字典序。

$1\leq n\leq 5\times 10^5$ 。

题解

本题解从二分图匹配的角度解决了该问题,并说明了贪心的正确性(

根据题目可以想到一个比较 $\text{trival}$ 的贪心,每次先将最右子树遍历以保证最左儿子的权值最大。

然后你就获得了 $60$ 分的成绩,打开一看仅过掉了 $v_i$ 互不相同的情况。

考虑这个算法的正确性,我们仅保证了最优化最左儿子的代价,但是 $=$ 的性质可以对于右儿子进行调整,但是贪心无法做到。

而对于 $v_i$ 互不相同的情况,由于不会出现 $=$ ,那么显然是正确的。

那么我们只能枚举当前位置判断是否后面存在解,一直最优化此过程得到的一定是字典序最大的。

现在的问题变成了:如何判断是否存在一种方案给未给定点定权值满足题意?

稍微转化题意:我们当前可以得到一些限制:必须选择 $a_i$ 个 $\geq b_i$ 的,需要满足所有的限制。为了方便将其限制写成 $(a_i,b_i)$

这是一个简单的贪心,按照 $a_i$ 排序从小到大依次从左面开始选择。但是并没有显式的得到更优秀的判断条件。

考虑建二分图,左侧代表未匹配结点 $\sum a_i$ 个,右侧代表还未选择的 $v$ 。

那么对于限制 $(a_i,b_i)$ ,只需要将左侧 $a_i$ 个连向 $b_i$ 的后缀。判断条件为是否该图存在完美匹配。

考虑 $\text{Hall}$ 定理,我们将所有限制按 $b_i$ 排序,可以发现只要判断后缀,即对于 $\forall i,S=[i,i+1,...]$ ,$|S|\leq |N(S)|$ 。

即 $\forall i,\sum_{j=i} a_j \leq W_{b_i}$ ,$W_{b_i}$ 表示 $b_i$ 后面未匹配点的个数 。

移项可得 $W_{b_i}-\sum_{j=i} a_j\geq 0$ ,那么我们仅需要判断是否对于每个后缀剩余的位置都需要 $\geq 0$ 。

那么我们只需要维护每个位置的 $W-\sum_{在他位置之后的} a$ 是否均 $\geq 0$ ,由于 $\text{Hall}$ 定理,这个条件是充要的。

故每次到一个需要判断的点撤销之前父亲的操作在新加入一个操作,判断序列的最小值是否 $\geq 0$ 。

整个过程仅需要一个数据结构支持查询最小值,区间加,线段树维护即可。

判断是否加入可以线段树二分,故整体的时间复杂度为 $\mathcal O(n\log n)$ 。

https://loj.ac/s/1083508

posted @ 2021-03-07 17:16  siruiyang_sry  阅读(116)  评论(0编辑  收藏  举报