专栏文章

题解:CF2152H2 Victorious Coloring (Hard Version)

CF2152H2题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minnjpv5
此快照首次捕获于
2025/12/02 05:19
3 个月前
此快照最后确认于
2025/12/02 05:19
3 个月前
查看原文
H1 告诉我们两件事情:只需要考虑染色方案是连通块;对于局部子问题最优化是正确的。
我们继续挖掘性质。先不考虑边权相等。若存在边权为 w1w_1 的边在连通块 内部,存在边权为 w2w_2 的边在连通块 边缘,那么有 w1<w2w_1<w_2
证明:若 w1>w2w_1>w_2,则将连通块按照 w1w_1 这条边划分,选择与 w2w_2 这条边不交的部分,变化量 w1+w2<0\leq -w_1+w_2< 0,所以这个染色方案一定不是最优。
所以考虑建 kruskal 最小生成树,一个可能最小的连通块是生成树的一棵子树,我们对子树内贪心。
aia_{i} 表示 ii 子树在原树上的领域边权和,fi,xf_{i,x} 表示当 L=xL=x 时,只考虑 ii 子树内染色方案的 xi\sum x_i 最小值。
考虑转移,对于叶子有 fi,L=max(0,Lai)f_{i,L}=\max(0,L-a_i),对于非叶子有 fi,L=max(fl,L+fr,L,Lai)f_{i,L}=\max(f_{l,L}+f_{r,L},L-a_i),其中 l,rl,r 表示 ii 的左右儿子。
然后就是一些 dirty work:发现 fi,f_{i,*} 是凸的,证明可以归纳。考虑维护凸包的拐点和斜率 变化量(人话就是差分两次),这样可以在做 fl+frf_{l}+f_{r} 的时候比较简单合并。
对于 LaiL-a_i 部分,这相当于凸包和直线求 max\max,我们发现这条直线斜率是 11,而凸包的斜率为整数且 0\geq0,所以被这个直线覆盖的点构成一段前缀,所以覆盖的时候直接暴力在前缀删点即可。
用优先队列维护凸包,启发式合并。询问时直接二分即可。时间复杂度 O(nlog2n+qlogn)O(n\log^2 n+q\log n)

评论

0 条评论,欢迎与作者交流。

正在加载评论...