题解
第一种情况一定不会存在 —— 因为这种情况完全可以避免,而且在避免这种情况的情况下,最大代价不会超过 n \times nn×n。
现在相当于,题目多了一个限制条件,每个字符串的后缀必须先被填入。我们把每个字符串反转,转化为每个字符串的前缀必须先被填入。
问题在于,填完一个字符串后,以它为前缀的字符串们被填入的顺序如何确定 —— 我们建立一棵 Trie 树,DFS 求出每个点 uu 向上最近的单词点 p(u)p(u),注意这里的 uu 不一定是 p(u)p(u) 的子节点,p(u)p(u) 可以通过添加一个或多个字符来得到 uu。
将每个 p(u)p(u) 与 uu 建立父子节点关系,在新的树上 DFS,优先走子树大小(子树上的单词数量)较小的节点,记录每个节点的 DFS 序即为填写顺序。