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\) 对应的边的编号之间,得转移为:
可以给根节点一个虚拟父亲,\(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\) 序即可维护。