ABC Ex 记录
听从 tby 教导,做一些 abc_ex 的题。
唉如果我做过我就不加进去了。☆表示我觉得要补代码而不是完全口胡的题。
ABC213H
Tag:多项式,DP。
唉本来不想做多项式题的。不过这个太简单了。
设 \(dp_{u,t}\) 为走到 \(u\) 用了 \(t\) 的时间。
对 \(t\) 这一维做分治 NTT 即可。代码不想写。
☆ABC214H
Tag:费用流原始对偶。
先 SCC 缩点一波,然后变为 DAG。
跑第一遍费用流的时候,可以直接拓扑排序做到 \(O(n+m)\),因为图是一个 DAG(第一次增广)。而增广几次之后图会变得千疮百孔,不好用更快的最短路算法(实际上复杂度的瓶颈在最短路上而非 dinic)。
使用 zkw 费用流(费用流原始对偶),可以做到每次增广都只需要 \(O(m \log m)\) 的复杂度。而限制了 \(f \le 10\),所以 \(O(m f \log m)\) 的复杂度完全可以接受。
值得复习。
ABC215H
Tag:霍尔定理,高维前缀和。
ABC216H
Tag:LGV 引理,动态规划。
ABC217H
Tag:Slope Trick 优化 DP。
直接 Slope Trick 就行,没啥难度。
ABC218H
Tag:wqs 二分,反悔贪心。
唉如果你瞎猜一波这个东西有凸性,其实也就做完了。
为啥有凸性呢?考虑不妨设蓝色的数比较少,那么蓝色显然不会连续。这样就是经典的“有一个长度为 \(n\) 的数组 \(a_i\),选走若干个互补相邻的数,最大化收益”。这个模型显然是凸的。
这个咋反悔贪心呢。一个很弱智的想法是,每次选能选的数中收益最大的。唉但是他有可能被反悔掉。而如果被反悔掉,一定是左右两个都去选。所以可以将其等效为 \(v_{l} + v_r - v\) 这种形态。使用双向链表维护。
ABC221H
Tag:简单计数。
对于这种类似拆分数的题,考虑交换两维坐标,前缀和优化做到 \(O(n^2)\),不就做完了吗。 /xk
具体的,设 \(dp_{i,j}\) 为你钦定最大值为 \(i\),然后和是 \(j\)。有转移:
ABC223H
Tag:前缀线性基。
字面意思,随便做。
ABC226H
Tag:k-th minmax 容斥,概率期望。
首先转化 \(k\) 大值为
而 \(E(\min(T)) = \int_{0}^{+ \infty} \prod_{u \in T} P(X_u \ge x) \text{d} x\)。
而 \(P(X_u \ge x) = \max\{0,\min\{\frac{R_u-x}{R_u-L_u},1\}\}\),所以可以枚举 \(x\) 所在段,然后设 \(dp_{i,j}\) 为在前 \(i\) 个数中选了 \(j\) 个得到的多项式(最多 \(n\) 次)。
复杂度 \(O(n^4)\),足以通过本题。
ABC231H
Tag:上下界网络流。
ABC232H
Tag:神秘构造题,数学归纳法。
ABC233H
Tag:曼哈顿距离。
显然要把曼哈顿距离转化为切比雪夫距离,使用主席树维护。
ABC235H
Tag:Kruskal 重构树,多叉笛卡尔树,树形 DP。
ABC236H
Tag:图的边容斥,简单奇数,集合幂级数 exp。
ABC237H
Tag:Dilworth 定理,回文串。
ABC238H
Tag:区间 DP,模型转化。
ABC239H
Tag:整除分块优化 DP。
ABC242H
Tag:Min-Max 容斥。
Min-Max 容斥一下,然后再序列上线性 DP。做完了。
ABC243H
Do Do Do work work work
ABC244H
Tag:李超线段树,凸包。
显然可以转化为平面几何问题,关键是你把谁当点、把谁当线。
一种是李超线段树,我觉得更好写。(需要把询问离线下来)
还有一种是维护动态凸包。但是平衡树太他妈难写了,我肯定不会这么做。
使用二进制分组。复杂度不变。
ABC245H
Do Do Do work work work
ABC246H
Tag:子序列自动机,动态 DP。
考虑每个点往他后面第一个 \(0/?\) 以及第一个 \(1/?\) 连边,会得到一个 DAG。
那么本题就是对一个 DAG 进行固定起点的路径计数。这个可以直接 DP(听起来很魔怔,但由于这个 DAG 长的比较特殊所以能这么做)。
ABC247H
Tag:生成函数,斯特林数,排列的性质。
ABC248H
Tag:序列分治,线段树。
首先有一个 \(O(nk \log n)\) 的做法:扫描 \(r\),对 \(l\) 动态维护 \(\max_{l \le i \le r} a_i - \min_{l \le i \le r} a_i - r-l+1\)。使用线段树维护区间中多少个数等于最小值、最小值 \(+1\)、最小值 \(+2\)。
但是可以序列分治。说出这个词之后就不太需要解释了,cdq 一下就行。
特别的,对于这种“符合要求的子区间数”的问题,可以考虑 cdq 分治+二维数点(或者其他什么神奇技巧)
ABC249H
Do Do Do work work work

浙公网安备 33010602011771号