CF1276

Codeforces Round #606 (Div. 1, based on Technocup 2020 Elimination Round 4)

A

只有 \(one\) 时删 \(n\),只有 \(two\) 时删 \(w\),出现 \(twone\) 时删 \(o\)

B

发现 \(a,b\) 一定为割点,那么 \(a,b\) 将整张图分成了三个点集,没有被 \(a,b\) 夹在中间的两部分点集的大小乘积即为答案。

C

枚举短边长度 \(r\),发现一个数 \(x\),最多能填入当前矩形 \(\min(cnt_x,r)\) 个,\(cnt_x\)\(x\) 的出现个数。设 \(sum=\sum\limits_x \min(cnt_x,r)\),得长边长度最长为 \(\left\lfloor \frac{sum}{r} \right\rfloor\)。因为短边最长为 \(\sqrt n\),所以这样就能 \(O(n\sqrt n)\) 求解答案了。构造方案时,将所有数按 \(cnt_x\) 排序,按顺序在斜着填即可。

D

\(f_{x,0/1/2}\) 表示在 \(x\) 子树内对应情况的方案数,\(0\)\(x\) 被编号小于其父边的边删去,\(1\) 为通过父边删去 \(x\)\(2\) 为通过父边删去 \(x\) 父亲。设 \(x\) 儿子个数为 \(k\)\(d\) 及其之前的儿子对应的边都比父边编号小,即父边编号在 \(d\)\(d+1\) 对应的边的编号之间,得转移为:

\[\large\begin{aligned} f_{x, 0} &= \sum_{i = 1}^d f_{y_i, 2}\prod_{j = 1}^{i - 1}(f_{y_j, 0} + f_{y_j, 1}) \prod_{j = i + 1}^k (f_{y_j, 0} + f_{y_j, 2}) \\ f_{v, 1} &= \prod_{i = 1}^{d}(f_{y_i, 0} + f_{y_i, 1}) \prod_{i = d + 1}^k (f_{y_i, 0} + f_{y_i, 2}) \\ f_{v, 2} &= \sum_{i = d + 1}^k f_{y_i, 2}\prod_{j = 1}^{i - 1}(f_{y_j, 0} + f_{y_j, 1}) \prod_{j = i + 1}^k (f_{y_j, 0} + f_{y_j, 2}) + \prod_{i = 1}^k (f_{y_i, 0} + f_{y_i, 1}) \end{aligned} \]

可以给根节点一个虚拟父亲,\(0\) 为根节点被删,\(1\) 为根节点没被删,因此答案为 \(f_{1,0}+f_{1,1}\)。记录前缀积和后缀积即可快速转移。

E

在⛏了

F

能对答案产生贡献的串有 \(\varnothing,*,s,s*,*s,s*t\),只有 \(s*t\) 不好统计。

分别建正串和反串的 \(SAM\),设第 \(i\) 个位置为 \(*\),考虑在以 \(i-1\) 为后缀对应的节点统计以 \(i+1\) 为前缀的节点的贡献。将 \(i+1\) 在反串的 \(SAM\) 对应的节点挂到 \(i-1\) 在正串的 \(SAM\) 对应的节点上。用 \(set\) 启发式合并维护每个点子树内所有挂着的节点的集合,该集合的贡献为这些点在 \(Parent\) 树上到根节点的链的并,通过 \(dfs\) 序即可维护。

posted @ 2020-10-14 20:15  lhm_liu  阅读(148)  评论(0编辑  收藏  举报