IOI2020集训队作业-21 (CF590E, AGC031D, AGC026E)
A - CF590E Birthday 题意 有 n n n 个互不相同的字符串,你需要选出这些字符串的一个子集,使得这个子集内不存在两个不同的字符串 s , t s,t s , t ,满足 s s s 是 t t t 的子串。问这个子集最多能包含多少个元素,并输出方案。 n ≤ 750 n\le 750 n ≤ 7 5 0 ,字符串的长度之和不超过 1 0 7 10^7 1 0 7 。 Sol s s s 是 t t t 的子串等价于 t t t 是 s s s 的某一个前缀的后缀。由于后缀关系具有传递性( a a a 是 b b b 的后缀, b b b 是 c c c 的后缀可推出 a a a 是 c c c 的后缀),所以只需要求出所有的“ t t t 是 s s s 的某一个前缀的最长后缀”的关系,再跑一遍传递闭包就可以得到“所有的 t t t 是 s s s 的子串”的关系。 将字符串作为元素,定义偏序关系 ≤ \le ≤ 为:若 s s s 为 t t t 的子串则有 s ≤ t s\le t s ≤ t (这个定义显然满足自反性、非对称性和传递性)。若 s ≰ t s\not\le t s ≤ t 并且 t ≰ s t\not\le s t ≤ s 我们就称 s s s 和 t t t 为不可比较的。题目要求我们求的就是一个最大的子集