CF1083

A.The Fair Nut and the Best Path

洛谷链接& CF 链接

一眼树形 DP。但这题还限制需要保证路径上任何节点处 \(\sum{w}-\sum c\geqslant 0\)。其实不用管这条限制,因为若一条路径上经过一条边后 \(\sum w-\sum c<0\),那么将这条边断开,只取路径的后半程更新答案肯定更优。所以问题就变成了点有正权,边有负权,求树上最大带权路径和,直接树形 DP 就完了

B.The Fair Nut and Strings

洛谷链接& CF 链接

题意即为最大化不同的前缀的数量。容易发现,若前缀 \(p1,p2\) 不同,那么其再拼接任意字符仍然不同,反之不然。这启示我们从低到高按位考虑,在限制内最大化每一个长度的前缀的数量。然后就没然后了,只需要记录当前前缀恰好为上界、下界以及无限制的前缀的数量再转移即可,无限制前缀每次可以拼接任意字符,上界考虑拼接字符后会转为下界还是无限制前缀,下界考虑能否转为无限制前缀即可

C.Max Mex

洛谷链接& CF 链接

题解区:这是好题

要求路径 MEX 最大,即要求一条链上出现的部分元素 \([0,k]\) 中的 \(k\) 最大。如此,可以二分 \(k\),每次判断树上是否存在一条链上有 \([0,k]\) 所有元素;所以我们需要维护这样的连续段的信息。

然后我们可以注意力惊人地发现这个维护信息可合并,即可以用线段树维护。

对于每个区间 \([l,r]\),考虑维护树上 包含 \([l,r]\)所有元素的链 的两个端点 \((p1,p2)\);设区间 \([l,k],[k+1,r]\) 的链的端点分别为 \((p1,p2),(p3,p4)\),可以发现若存在包含 \([l,r]\) 的链,那么这条链的端点肯定在 \(p1,p2,p3,p4\) 之间,所以可以 \(4\choose 2\) 枚举端点。此时需要判断另两个端点是否在这条链上,有个经典 trick,若某点在另两点路径上,那么其到这两点的距离之和等于这两点的距离,所以可以用 \(O(1)\) LCA 求出距离再判断。

据说倍增 LCA 会被卡。。

既然都上线段树了,刚开始的二分也可以不要了,直接线段树上二分即可。复杂度 \(O(6n\log n)\)

D.The Fair Nut's getting crazy

洛谷链接& CF 链接

我会 \(O(n^5)\) 做法 脚题。为什么有 3500?

三个区间的关系当然要枚举中间那个区间了。容易发现区间合法的条件为

\[l1<l2\leqslant r1<r2,\max_{i=l2}^{r1}\{pre_i\}<l1,\min_{i=l2}^{r1}\{lst_i\}>r2 \]

考虑枚举 \(r1\),显然答案为

\[\sum (i-\max_{j=i}^{r1}\{pre_j\}-1)(\min_{j=i}^{r1}\{lst_j\}-r1-1) \]

\(i\) 的左右边界是可以二分出来的。设 \(a_i=\max_{j=i}^{r1}\{pre_j\},b_i=\min_{j=i}^{r1}\{lst_j\}\),把上列式子拆开,需要维护 \(\sum i\times b_i,\sum a_ib_i,\sum a_i,\sum b_i\),用线段树即可。区间取 \(\max\) 变成区间赋值即可

祭奠我死去的错误枚举顺序
  • \(O(n^5)\) 只需要枚举四个边界,再桶一遍区间交判断每个元素是否只出现一次即可。可惜 CF 没有部分分

  • 容易发现不用枚举 \(l1\)。假设区间 \([l2,r2]\) 是合法的(即区间内每个元素只出现一次),记 \(pre_i\) 为上一个值为 \(a_i\) 的位置,某一 \(l1\) 合法当且仅当 \(\min_{i=l2}^{r1}\{pre_i\}<l1\),所以合法 \(l1\) 的数量即为 \(l2-1-\min_{i=l2}^{r1}\{pre_i\}\)

假设确定 \(r2\) 时,\(l2\) 的最小值为 \(k\)(且显然随着 \(r2\) 递增,对应的 \(k\) 单调不减),那么此时的方案数即为

\[\sum_{l2=k}^{r2}\sum_{r1=l2}^{r2} l2-1-min_{i=l2}^{r1}\{pre_i\} \]

然后就会发现虽然现在问题变成了求滑动窗口中每个区间的最值,即每个值的贡献次数问题,但因为滑窗区间端点一直在变化这太难脚了(其实是我没有推出具体的用脚维护的式子)。所以我们打开题解

E.The Fair Nut and Rectangles

洛谷链接& CF 链接

斜优板子怎么让我碰上了

保证没有互相包含的矩形,说明按 \(x_i\) 升序排序后,\(y_i\) 单调递减,这样按顺序加入矩形后矩形并就很好计算了。

考虑 DP,设 \(f_i\) 为最后一个矩形为第 \(i\) 个矩形的最大权值和,有转移式 \(f_i=max_{j<i}\{f_j+(x_i-x_j)\times y_i-a_i\}\),这是一个显然的斜优,单调队列维护上凸包即可。

posted @ 2025-09-01 18:27  沄沄沄  阅读(8)  评论(0)    收藏  举报