2023-7-5 #64 短暂回归撕开色盘 拼凑回忆填补空白
——泠笙《多重妄想》
442 P7729 交通运输(Wormhole Transportaion)
挺不错的题目。
第一问较为简单,建图后,容易发现答案是 \(m-2\) 加最小环长度 \(L\)。
第二问先考虑环的部分分,问题即为:计数带标号无根树的数量,使得 \(\sum\operatorname{dis}(i,i\bmod n+1)=2n-2\)。提 \(n\) 为根,条件等价于所有子树点的编号都是区间。
直接列出 dp,考察编号最小的儿子,去掉这棵子树后是一颗合法的树,而这颗子树也可以划分成 \(1\) 到根权值的前缀以及对应后缀,每一部分都是合法的树,因此:
转移记辅助数组 \(g_n=\sum_{i+j=n+1}f_if_j\) 即可做到 \(O(n^2)\)。
仙人掌的部分分告诉我们非环上部分不需要考虑,不同连通块的合并也是平凡的,会这一部分可以更好理解杏仁做法。
杏仁的做法很有启发性,我们将两个端点对应路径长度写下来,假设为 \(l_1\leqslant l_2\leqslant\cdots\leqslant l_k\),于是最小环显然是 \(l_1+l_2\)。
若修改的部分不能被某个最小环完全覆盖,这样的修改是不可能最优的。于是我们考虑所有最小环,每个环都产生 \(f_L\) 的贡献。
但是这会算重,如果修改部分仅在路径 \(l_1\) 内其会被统计多次,我们容斥掉这一部分贡献,需要计算 \(h(A,B)\) 表示一个长为 \(A+B\) 的环,其中 \(A+1,A+2,\cdots,A+B,1\) 形成一条链,且符合上面 \(f\) 要求的树数量。
\(B\) 显然不影响,删去 \(B\) 后 \(A\) 一定形成两个符合上面要求的树,可以发现 \(h(A,B)\) 的值恰好是上面辅助数组 \(g_A\)。
一般情况能不能类似地考虑呢?根据上面“修改的部分要被某个最小环覆盖”的要求,可知修改的部分要形成某个最小环上的路径。根据解决杏仁的经验,我们需要分开处理被多个最小环覆盖的路径与其余路径。
容易发现若一条路径被多个最小环覆盖,其长度一定不超过 \(\lfloor\frac L2\rfloor\),一个方便的枚举方式是枚举所有在最小环上的点对对应的最短路。由于我们钦定了一条路径,因此其首尾都必须修改,若其长为 \(c\) 其贡献为 \(g_c-2g_{c-1}+g_{c-2}\)。
处理完长度小于等于 \(\lfloor\frac L2\rfloor\) 的路径,剩下的路径贡献形式很好,因为每个最小环每个长度恰有 \(L\) 条。而这些长度对应贡献和即为:
复杂度 \(O(nm)\)。
443 P8497 [NOI2022] 移除石子
神秘题,感觉其选拔了一堆有勇气,敢猜结论的选手,有点抽象。
dp 套 dp,不妨先考察内层 dp,先考虑 \(k=0\) 的情况:
容易发现可以只操作长为 \(3,4,5\) 的区间,且每种区间只会操作一次。直接 dp 需要记录有多少区间长度已经足够但可以延展到这个点,有多少区间必须够到 \(i\),以及多少必须够到 \(i+1\),这样状态数是 \(4\times 4\times 4\) 的。
转移时可以钦定多少到 \(i\),因此前两维可以合并成一个 \(\leqslant 6\) 的数,通过爆搜检验可以得知两维只需保留 \([0,2]\),即状态数为 \(9\)。
\(k>0\) 时,大多数情况多拿到石子一定比少拿优,通过手玩枚举可以发现只有 \(n=3,a_1=a_2=a_3=1\) 以及全 \(0\) 不满足,容易手动修正贡献,可以写出对应的最优化 dp。
转为 dp 套 dp 时看似状态数有 \([0,101]^9\) 级别,但是搜一搜发现 \(8765\) 种状态,于是直接过了。
444 2022CCPC 网络预选赛 F
技巧来源:P5549 [BJ United Round #3] 观察星象。
神秘题目。容易发现最小的圆一定满足两个点为直径或者至少三个点在圆上,但基于这个枚举不能得到较低的复杂度。
我们直接枚举一个点 \(x\),尝试钦定这个点在圆上最小化半径。显然有可二分性,每次判定一个圆上是否有合法的点。注意到一个点能贡献的区域是一段圆弧,断环为链变成区间,前缀线性基解决即可,这样就能做到 \(O(n^2\log n\log V)\),但是无法通过。
每次二分过于浪费,我们随机打乱序列,那么答案变大只有 \(\log\) 处。此时只有 \(O(n+\log n\log V)\) 次判定,复杂度 \(O(n^2\log n)\)。
445 Balanced Rainbow Sequence 加强版
放个链接:Balanced Rainbow Sequence。
这题给我的感觉很像 123 vs 321,记绿色为 \(0\),红色为 \(1\),蓝色为 \(2\)。
一个自然的想法是枚举绿色有多少个左括号,此时可以确定下来红色蓝色有多少左括号,而且容易确定贪心的修改策略。
固定了括号数量,接下来能进行的操作便只有将一对同色的 )(
变为 ()
(可以不相邻),根据贪心策略一定反转最前的 )
与最后的 (
。
先尝试暴力地刻画这一问题——我们记录 \(p_{i,0/1/2},s_{i,0/1/2}\) 表示一个位置前面某种颜色的右括号数量与后面某种颜色的左括号数量,并记 \(x_{0/1/2}\) 为某种颜色的操作次数。
仅考虑红-绿括号序列,对于位置 \(i\),其操作后值会加上 \(2(\min(p_{i,0},s_{i,0},x_0)+\min(p_{i,1},s_{i,1},x_1))\),需要其操作后为正,于是限制形如:
注意到 \(\min_{x\in S} x+\min_{y\in T} y=\min_{x\in S,y\in T}x+y\),可以拆成 \(3\times 3\) 组限制,而本质上只需考虑两种限制:\(x_{0/1}\geqslant c,x_0+x_1\geqslant c\),在满足 \(x_1\) 限制后显然要尽可能增加 \(x_0\),于是限制容易刻画。
每次修改暴力用线段树维护信息可以做到 \(O(n\log n)\),但注意到操作区间端点移动是 \(O(n)\) 级别。问题即前后缀加入删除,以及全局加全局求最值,可以使用双栈模拟队列做到 \(O(n)\)。
记录一下另一种做法:
考察绿色的反转情况,一定是一段前缀的 )
变 (
,一段后缀的 (
变 )
,而且为了红色蓝色通过反转可以合法,反转的前缀长度一定在某个区间内,后缀长度同理。
我们操作到最低限度后,考虑若绿色前缀多一次操作,其一定意味着多了这次操作后,红色蓝色均减少一次操作。同时一定只有一个前缀的操作满足条件,而且绿色前缀与后缀的操作是独立的。于是各自二分长度进行判定即可,复杂度 \(O(n\log n)\),实现难度低一个档次。
446 CFgym102331J Jiry Matchings
火星在住
树 上 种 树
容易列出暴力 dp 做到 \(O(n^2)\)。
类似种树的费用流模型,我们可以同理得到本题费用流模型,因此可以证明 dp 的凸性。由于有凸性,dp 信息的合并时可以做到线性的(闵可夫斯基和)。
然后就是经典技巧,对树链分治,每一条重链分治合并 dp 信息,每个点也分治合并轻子树 dp 信息,复杂度容易分析到 \(O(n\log^2 n)\)。
447 CFgym102331H Honorable Mention
与上一道题很像,弱化版:CF280D k-Maximum Subsequence Sum。
可以建出费用流模型因此存在凸性,类似上一题本题信息合并也可以线性。
若询问将区间分解的 \(\log\) 个结点信息暴力合并复杂度会退化,一个暴力的解决方法是 wqs 二分,那么就是在 \(\log\) 个结点的凸包上二分,合并信息只需合并 \(O(1)\) 个数,但是这样就有三个 \(\log\)。
将 wqs 写成整体二分(本题中写成类似 P7856 「EZEC-9」模糊众数 的方式比较方便)。即进行 \(\log\) 轮,每轮把每个询问挂在二分到的位置上,然后从小到大枚举 mid,此时凸包上切的点具有单调性,复杂度 \(O(n\log n\log V)\)。