Solution Set - 杭电多校 2022 Day3 一句话题解
A:设 \(f_i\) 表示从 \(i\) 升级到 \(i+1\) 的期望花费,\(sw_i\) 为 \(w_i\) 的前缀和,\(sf_i\) 为 \(f_i\) 的前缀和,有 DP 式子:
后面是一个显然的分治 NTT 形式,直接做就行了,时间复杂度 \(O(n\log^2 n)\)。
B:感觉自己很愚昧嗷。二分 boss 被杀死的时间,使用状压 DP 计算伤害即可,时间复杂度 \(O(2^n\log 2\times 10^7)\)。
C:SMWY,SBT。
E:考虑拆边,模拟 Kruskal 的过程,我们钦点全部的首先取较大的边权,并拆边为 \(\{u,v,a,0/1\}\) 和 \(\{u,v,b,0/-1\}\),后一个权值表示加入这条边对选择 \(k\) 的个数的影响。
对边进行排序,按权值从小到大,权值相同的优先考虑 \(1/-1\) 排序。
考虑状压 DP,设 \(f_{i,S,j}\) 表示目前在第 \(i\) 条边,考虑第 \(i\) 条边选或者不选,当前连通性的最小表示为 \(S\),目前用了 \(j\) 个 \(a\),考虑选与不选合并连通性的情况,可以的到 DP 式。
F:果然几何结论不熟悉就很蠢,注意到随机情况下的二维凸包是 \(O(\log n)\),建立线段树维护区间凸包,向上合并的时候归并排序求凸包。
询问的时候,先求出凸包然后最小圆覆盖即可,时间复杂度 \(O(q\log^2 n)\)。
I:排序后贪心。
J:设 \(f_{i,j}\) 表示从 \(i\) 出发只经过 \([l_j,r_j]\) 之间的边能否到达 \(v_j\),最后只需要求出 \(f_{u_j,j}\) 即可。
考虑怎么求这个,建出反向的 DAG,对于一条边 \(u\to v\),需要更新 \(f_v\to f_u\land S\),考虑如何求出这个 \(S\),分块预处理即可。
K:分四个方向讨论即可。
L:随便 DP 就行了。

浙公网安备 33010602011771号