回文树在线剖分???
回文树在线剖分???
Preface
蒟蒻刚学PAM,就做到一道恶心PAM+LCT题,然而蒟蒻并不会LCT,于是想出一种奇妙的解法,在此分享。欢迎讨论交流。
The problem
Source
IOI2017中国国家队候选队论文集 --- 回文树及其应用 翁文涛 --- 5.5 AlphaDog(原创)
Also in 本校OJ Problem4427
Description
对于一个串的特殊值F(s)定义为
\[\large F_s= \sum_{1 \leq x \leq y \leq|s|} LCP(x,y) \]
其中LCP即Longest Common Palindrome的缩写,也就是说LCP(x,y)表示最长的字符串t的长度,其中t要满足三个条件:
- t是回文的
- 存在一个i,满足s[i...x]=t
- 存在一个j,满足s[j...y]=t
一开始有一个空串s。接下来进行q次插入,每次在串的末尾加入一个新的字符。每次加入后,询问当前串的F值。强制在线。
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|) \]
这部分我们可以把贡献都放在lca处统计
不强制在线的数据有20% -_- 只需要先把整颗树跑出来再树剖
100%
强制在线则容易想到 Link/Cut Tree
不会啊!!!怎么办???
回到树剖——我们的瓶颈在于无法即时得到合适的剖分方式(重儿子)
blingbling 脑中跳出一个回文树的有趣性质
Lemma
设x为fail树上一个节点,diff[x]为 x与 Fa[x] 两点的 Len 的差值
则 x 到树根的fail链,可以划分为O(log(Len_x))条 diff 值相等的链
引理证明可参考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出 平衡规划等 神奇做法。
- Java在线笔试编程(3)---计算回文序列
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- UOJ#9 浅谈在线仙人球嵌套动态网络路径剖分优化的分支定界贪心剪枝启发式迭代加深人工智能搜索决策算法解决问题
- 【全排列】亚马逊在线测试-找下一个回文字符串
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
- 回文判断 移动圆桌 同时在线时间聊天
- 恩怨两姐妹的剧集介绍,分集剧情介绍/剧照欣赏/在线观看/播出时间
- Asp.Net实现在线人数统计
- c# 软件自动在线更新代码(二)
- 观看加勒比海盗惊涛怪浪在线高清串流最快
- AngularJS+Node.js实现在线聊天室
- 怎样可以在线将pdf转换成jpg格式
- 在线申请会员卡正在审核中问题排查?
- 快速在线抖音去水印工具
- 光荣的愤怒,光荣的愤怒在线观看,光荣的愤怒 剧照,光荣的愤怒 剧情介绍
- jquery、html/css/javascript、jdk、struts1、struts2、hibernate、hibernate annotation、spring等在线文档
- 利用tcpcopy引流做模拟在线测试
- LeetCode | Palindrome Number(回文数字)
- CF 316 E. Pig and Palindromes 求左上角走到右下角是回文的方法数 DP