UVA11488 字符串 Trie
UVA11488 Hyper Prefix Sets
给定 01 串 \(S_1 \sim S_n\),选出一个 \(S\) 的子集 \(T\)。设 \(T\) 的长度为 \(k\),最大化 \(f(T) = |\operatorname{lcp}\{T\}| \times k\) 的值。
\(\operatorname{lcp}\) 意味着 Trie。考虑建字面意义上的 01-Trie。
对于 Trie 的每一个节点,维护节点深度 \(d\) 和子树字符串数量 \(l\)。
由于 Trie 上 \(z_{\operatorname{lca}(u, v)} = \operatorname{lcp}( z_u, z_v)\),其中 \(z_u\) 是根节点到 \(u\) 的一条链所代表的字符串,所以 \(T\) 为节点 \(i\) 的子树字符串集时,\(f(T) = d_i \times l_i\)。
枚举节点,求 \(\max d_i \times l_i\) 即可。代码。
注意在多测清 Trie 时需注意以下几点:
- 一定要清掉 \(tr_{i, 0}, tr_{i, 1}, d_i, l_i ~ (0 \leq i \leq cnt)\),注意要从 \(i = 0\) 开始;
- 将 \(cnt \gets 0\)。
其中 \(cnt\) 为 Trie 的最大节点编号。
实际上没有必要开 int64。

浙公网安备 33010602011771号