题号:NC274789
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld
题目描述
若干年后,偶尔回想起那个午后,我都有些怅然若失,如果能重来,我是否有机会告诉伊娜小姐呢,只是一句简单的,透着土气的话。
定义一棵有根树为
表示树,当且仅当这棵树上所有边都有一个在

之间的小写英文字母的边权。
对于一棵表示树上的两个点

,定义
)
表示从

到

的简单路径上经过的所有边的边权依次拼接而成的字符串。
注意,
)
不一定与
)
相等。
定义一棵表示树为这

个字符串的
子串表示树,当且仅当对于每个字符串

的每个子串

,都存在至少一对
)
满足

是

的
祖先,且
%3Dt)
。
定义一棵子串表示树

为这

个字符串的
最小子串表示树,当且仅当不存在任意一棵这

个字符串的子串表示树

,满足

的节点个数

的节点个数。
现在,你需要求出这

个字符串的最小字串表示树的节点个数。
输入描述:
第一行一个整数
,表示给定的字符串个数。
接下来

行,每行一个字符串,表示

。
输出描述:
一个整数,表示最小子串表示树的大小。
示例1
说明
下图是一种合法的构造方法,需要用到

个点。容易发现不存在点数更少的构造方案。