九省联考 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