回文树在线剖分???

Preface

蒟蒻刚学PAM,就做到一道恶心PAM+LCT题,然而蒟蒻并不会LCT,于是想出一种奇妙的解法,在此分享。欢迎讨论交流。

The problem

Source

IOI2017中国国家队候选队论文集 --- 回文树及其应用 翁文涛 --- 5.5 AlphaDog(原创)
Also in 本校OJ Problem4427

Description

Data Constraint

\[q \leq 10^5 \\\\large \Sigma 为小写字符集\]

Analysis

容易看出:LCP(x,y) 其实就是 x,y在回文树上的两点 在fail树上的lca处的 len值
每加入一个字符后,F(s)会增加一些值——

\[\large \Delta F(s)=\sum_{1 \leq i \leq |s|}LCP(i,|s|)\]

这部分我们可以把贡献都放在 Tree

不会啊!!!怎么办???

回到树剖——我们的瓶颈在于无法即时得到合适的剖分方式(重儿子)

blingbling 脑中跳出一个回文树的有趣性质

Lemma

引理证明可参考oi-wiki最小回文划分部分

这样我们就可以这样定义x的重儿子son了:son为 x的儿子中 满足 与 x 的 diff 相等的那个

如果没有满足的 那x就没有son。那如果有多个呢???

这个问题在我码完3k代码后蹦出,吓了我一跳。事实上,这种情况极少,且不影响做法。

理由:
设 不同的两点 x,y 有公共父亲 z,z 的父亲为 fz。设 x,y 所代表的串分别为X,Y。
若 x,y 均满足成为z的重儿子的条件,则显然 |X|=|Y|。又因为X不同于Y,则 diff[x] > |X|/2 ,那么 Len_fz<0,则fz只可能为1节点,这时z只要随便选一个满足条件的儿子作son就行啦!

复杂度——O(q log^2 q)

Postscript

由于本题的LCT做法不需要cut一类操作,本校其他dalao只码了2.1k,而我用我的方法码了3.0k。。。

不过从方法的简单易懂来说,还是不错的。还特别创新不是吗,嘻嘻。

大佬们还YY出 平衡规划等 神奇做法。

08-24 05:50