ARC201C

· · 题解

小清新字典树。

首先有一个巧妙的转化。原问题实际上等价于,一棵满二叉树,你可以对某些点进行 01 染色,最终使得任意根到叶子的路径上至少有一个被染成 1 的节点。求合法染色方案数。

为什么是这样?把题目中的串扔到 trie 上。那么任意根到叶子的路径就是任意极长 AB 字符串。选择某个串 X 相当于在 trie 上 X 的结束位置染色。那么问题成功转化。

那么这个就是树上 dp 板子了。记 sz_i 表示 i 子树中可染色点的个数(包括自身),F_i 表示 i 子树的合法染色方案。同时记 ls_irs_i 表示 i 的左右儿子编号。

那么处理完 sz_i 后,对于 F_i 我们有:

那么就做完了。每次加入串时,对这个串影响到的 $F_i$ 重构即可。这个实现还是有些麻烦的,简洁一点的实现可以参考第一篇题解。 [Submission](https://atcoder.jp/contests/arc201/submissions/69726727)