首页 > 其他分享 >BZOJ 4231 回忆树

BZOJ 4231 回忆树

时间:2024-09-08 22:03:38浏览次数:3  
标签:le 出现 ACAM 次数 4231 lca root 回忆 BZOJ

以下为自己口胡,未经网上搜索题解验证

Statement

一棵 \(n\) 个点的树,每条边有一个小写字母边权,\(m\) 次询问,每次给定 \(u,v,s\),问字符串 \(s\) 在 \(u\to v\) 路径组成的字符串中出现了几次。\(n,m\le 10^5,\sum|s|\le 3\cdot10^5\).

Solution

Sol 1

把 \(u\to v\) 路径拆成 \(u\to lca,lca\to v\) 两条路径,答案等于 \(u\to lca\) 中 \(s\) 的出现次数 \(+\) \(lca\to v\) 中 \(s\) 的出现次数 \(+\) \(s\) 经过 \(lca\) 的出现次数。

“\(s\) 经过 \(lca\) 的出现次数”由于 \(\sum|s|\le 3\cdot10^5\),直接把 \(lca\) 两边长度为 \(|s|\) 的串拼起来,跑 KMP / ACAM 即可。

问题变成分别求“\(u\to lca\) 中 \(s\) 的出现次数”与“\(lca\to v\) 中 \(s\) 的出现次数”。第一问可转化为“\(u\to root\) 中 \(s\) 的出现次数”,第二问可转化为“\(root\to u\) 中 \(s\) 的出现次数”,直接差分一下就是第一二问真正的答案。

“\(u\to root\) 中 \(s\) 的出现次数”又可以转化为“\(root\to u\) 中 \(s\) 的反串的出现次数”,于是问题变成了快速求 \(root\to u\) 中 \(s\) 的出现次数。

把所有询问离线到每个 \(u\) 上,对于所有 \(s\) 建 ACAM,考虑 DFS 一遍求出所有答案。

当 \(u\) 向他的一个儿子 \(v\) 走,那么 \(pos(u)\) 对应的在 ACAM 上走一步 \(w(u,v)\) 得到 \(pos(v)\)。

可以这样解决:每次在 \(pos(u)\) 上单点加,对于询问 \((u,s_i)\) 就查 ACAM 上 \(s_i\) 子树和就行了,树状数组可以维护,回溯时撤回修改。

Sol 2

树剖,每个重链维护 SAM,预处理 SAM 上每个点的 \(\text{endpos}\) 集合大小,对于重链直接按 \(s\) 在 SAM 上走即可,轻重链切换位置需要暴力匹配。\(O(m\log n)\).


不会其他做法了 QAQ

标签:le,出现,ACAM,次数,4231,lca,root,回忆,BZOJ
From: https://www.cnblogs.com/laijinyi/p/18403596

相关文章

  • BZOJ 3796 Mushroom追妹纸 题解
    Statement给\(s_1,s_2,s_3\),求最长的\(w\)的长度,满足\(w\)是\(s_1\)子串\(w\)是\(s_2\)子串\(s_3\)不是\(w\)子串Solution1以下是我没看题解瞎胡的首先一个弱智想法是,枚举\(s_1\)上\(w\)的左端点,二分右端点,判定时\(s_2\)用SAM,\(s_3\)用单串AC自动......
  • BZOJ 4502 串 题解
    妙妙数数题key:数数题通常是,对于特定形式的计数,就盯着这个模式观察,看出一些充要条件、计数形式的转化,然后想办法维护。优化的本质就是把难算的变成好算的,把不好一起统计的(只能一个个数的)以某种角度、用某些数据结构,一起统计(多个多个数)。我觉得难点通常在于“盯出一些充要条件”,......
  • 亲启你的童年回忆录
    在苏教版一年级上册的奇妙旅程中,孩子们轻启智慧之门,从最初那轻盈跃动的拼音字母——a、o、e、u、y,如同初春的嫩芽,在稚嫩的心田悄然生根,绽放出学习的第一缕曙光。这不仅是语音的初探,更是心灵对知识无尽渴望的启程。随着时光的流转,孩子们在书页间穿梭,逐渐编织起自主阅读的......
  • BZOJ 4403序列统计题解
    缅怀zxc......
  • BZOJ2961 共点圆
    小学数学题题意进行转化:询问点\((X,Y)\),是否满足\(\forall_{i\inS}(X-x_i)^2+(Y-y_i)^2\lex_i^2+y_i^2\)。简单化简一下得到:\(X^2+Y^2\le2Xx_i+2Yy_i\)。也就是要维护\(2Xx_i+2Yy_i\)的最小值。\(2Xx_i+2Yy_i<2Xx_j+2Yy_j\)\(=X(x_i-x_j)<Y(y......
  • [bzoj2818]gcd
    https://darkbzoj.cc/problem/2818https://vjudge.net.cn/contest/649469#problem/Q给定整数N,求1≤x,y≤N且gcd(x,y)为素数的数对(x,y)有多少对.N≤10^7分析:线性筛出不大于N的所有素数,枚举gcd(x,y)(设为p),问题转化为求(x,y)=p的个数。设x=x'p,y=y'p,那么有(x,y)=1且1≤x,y≤N......
  • 极客少年旅游回忆录
    Day0“意外惊喜”原本8:20的飞机直接给我干到8:05起飞,抵达成都天府机场大概在9:35。——哥们太早了,我们在成都租的车还没有及时赶到!于是,我们等到10:10,驾驶着川G的车在高速公路上行驶,我特别感慨:大城市的车真的好多!(不怕被超速了哈哈)待1h之后,成功入住宾馆,领取到了相关周边......
  • P10660 BZOJ2759 一个动态树好题 题解
    从题目名字看出此题需要用动态树解决对于任意\(i\),都有唯一的\(p_i\)与之对应,由\(p_i\)向\(i\)连边,\(n\)种关系显然构成一基环树森林。对于环上的节点,一个点可以自己表示自己,所以可以直接解出该点的权值,其他点从环上的点直接推出即可。考虑如何动态维护这个过程,一个点上......
  • P10633 BZOJ2989 数列/BZOJ4170 极光 题解
    题目传送门前置知识CDQ分治|权值树状数组及应用|曼哈顿距离与切比雪夫距离的相互转化解法增加一维为时间戳,那么操作\(1\)等价于单点加。曼哈顿距离直接跑CDQ分治,貌似不太可做,考虑转化为切比雪夫距离。原曼哈顿坐标系中的点\((x_{1},y_{1}),(x_{2},y_{2})\)间的......
  • bzoj4767 两双手
    题目传送容斥思想的一道好题。首先我们可以很轻松的将使用\(A,B\)两种移动的次数从而到达一个点通过二元一次方程解出。不妨设分别为\(x,y\)步,这样一来,如果我们不考虑禁止点,方案为\(\binom{x+y}{x}\)。则我们现将给出的禁止点转换为步数\((x,y)\),并排序。但这样显然多算......