题解 P6999 【[NEERC2013]Dictionary】
Description
给一些单词,要求建一棵节点最少的字典树,使字典序中包含给定所有的单词(单词路径在树上出现过)。
Solution
若
接下来我们就得到了两两不包含的单词集。
考虑如果要把单词
因此对于两个单词
把这个东西看成一个有向图,这样构成一个联通的字典树
枚举根,求最小树形图即可。
这题还要记录方案,考虑朱刘算法的定义,缩点的新边选择的意义是选择这条边,去掉原来的入边。每一层每种新边的选择对应选1杀1,因此每次新边可以新开一个编号,在最终状态,考虑每个选择编号对应上一层选择不选哪两条边即可。把边弄出来之后,需要构造字典树,这里注意每个点可能代表若干串的某个下标,而边的含义是某点要在某点的某处往伸,我是把边预处理成最靠近根的点的位置。
时间复杂度