高级农民
- 积分
- 3718
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-9-5
- 最后登录
- 1970-1-1
|
哦哦哦我明白你的意思了~ 我刚看到这题也在想要不要把子树变成 substring 然后转化成一个 substring 问题,但是没联系到序列化可以确定唯一 tree 上。
在 pre-order 把树序列化了之后,我们的问题就变成了 “寻找字符串 S 中,最长的 non-overlapping identical substrings”. 但是 KMP 的 failure function 貌似只针对在 pattern 每个位置上 fail 了之后回滚到哪里,找最长的后缀使得其与自身前缀匹配,在这个问题上,如果树的节点值有重复,并且叶节点的表示符号一致的话,有些可能的情况要考虑:
最长的两个 substring 在整个树序列化之后的中间位置;
最长的两个 substring 在我查的几个 O(n) 算法中都是可以互相 overlap 的,但是在这题中我们需要 disjoint;
相关问题的一个帖子:
http://codeforces.com/blog/entry/12810
顺着这个思路我貌似还没有查到复杂度上面比较好的做法。。不知道有没有更好的 idea |
|