题目描述

给定一棵树,每个节点有一个权值 \(a_i\) 和一个字符串 \(s_i\)。
q组询问,每次询问一个字符串 S 和两个节点x,y:
求x到y路径上每个节点的字符串在 S 中出现的次数乘上各自的权值总和。
有单点修改权值的操作。
$n,q\leq 200000,\sum s_i,\sum S\leq 400000 $
强制在线,但询问串不加密。

sol

先 Orz 神仙Jouna_Kasa_Hasinele
首先考虑一下平方级别的做法,每次询问的时候建一个后缀自动机,遍历所有节点,统计作为 \(s_i\) 且出现在 <u,v> 路径上的串乘上 \(a_i\) 之和。

把这个做法弄的好一点,预处理所有询问串的广义后缀自动机,并把所有 \(s_i\) 以及对应的信息挂在该子串节点上。
对于做某个询问串时,只考虑与该串相关的节点,统计 \(\sum size_i\times a_i = \sum (size_i\times \sum a_j)\)。
前一个求和号,由于建后缀树的总点数复杂度是对的可以直接枚举,算 size 直接用树状数组可以维护。
后一个求和号必须要动态维护:
因为有位于 <u,v> 路径上的限制,就树上差分+欧拉序列维护一下,可以转换为欧拉序上的 4 段前缀和。
对每个后缀自动机节点维护平衡树/动态开点线段树,支持修改 \(a_i\) 以及查前缀和即可。

时间复杂度 \(O((q+|S|)\log n)\)。

JZOJ5915 [2018NOIP模拟] 明日之星(广义后缀自动机,线段树)的更多相关文章

  1. cf666E. Forensic Examination(广义后缀自动机 线段树合并)

    题意 题目链接 Sol 神仙题Orz 后缀自动机 + 线段树合并 首先对所有的\(t_i\)建个广义后缀自动机,这样可以得到所有子串信息. 考虑把询问离线,然后把\(S\)拿到自动机上跑,同时维护一下 ...

  2. CF 666E Forensic Examination——广义后缀自动机+线段树合并

    题目:http://codeforces.com/contest/666/problem/E 对模式串建广义后缀自动机,询问的时候把询问子串对应到广义后缀自动机的节点上,就处理了“区间”询问. 还要处 ...

  3. Codeforces.666E.Forensic Examination(广义后缀自动机 线段树合并)

    题目链接 \(Description\) 给定串\(S\)和\(m\)个串\(T_i\).\(Q\)次询问,每次询问\(l,r,p_l,p_r\),求\(S[p_l\sim p_r]\)在\(T_l\ ...

  4. 【CF666E】Forensic Examination - 广义后缀自动机+线段树合并

    广义SAM专题的最后一题了……呼 题意: 给出一个长度为$n$的串$S$和$m$个串$T_{1\cdots m}$,给出$q$个询问$l,r,pl,pr$,询问$S[pl\cdots pr]$在$T_ ...

  5. Codeforces 666E Forensic Examination(广义后缀自动机+线段树合并)

    将所有串(包括S)放一块建SAM.对于询问,倍增定位出该子串所在节点,然后要查询的就是该子串在区间内的哪个字符串出现最多.可以线段树合并求出该节点在每个字符串中的出现次数. #include<b ...

  6. BZOJ3413: 匹配(后缀自动机 线段树合并)

    题意 题目链接 Sol 神仙题Orz 后缀自动机 + 线段树合并... 首先可以转化一下模型(想不到qwq):问题可以转化为统计\(B\)中每个前缀在\(A\)中出现的次数.(画一画就出来了) 然后直 ...

  7. 洛谷P2178 [NOI2015]品酒大会(后缀自动机 线段树)

    题意 题目链接 Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是\([len_{fa_{x}} + 1 ...

  8. BZOJ1396: 识别子串(后缀自动机 线段树)

    题意 题目链接 Sol 后缀自动机+线段树 还是考虑通过每个前缀的后缀更新答案,首先出现次数只有一次,说明只有\(right\)集合大小为\(1\)的状态能对答案产生影响 设其结束位置为\(t\),代 ...

  9. [Luogu5161]WD与数列(后缀数组/后缀自动机+线段树合并)

    https://blog.csdn.net/WAautomaton/article/details/85057257 解法一:后缀数组 显然将原数组差分后答案就是所有不相交不相邻重复子串个数+n*(n ...

  10. 洛谷P4493 [HAOI2018]字串覆盖(后缀自动机+线段树+倍增)

    题面 传送门 题解 字符串就硬是要和数据结构结合在一起么--\(loj\)上\(rk1\)好像码了\(10k\)的样子-- 我们设\(L=r-l+1\) 首先可以发现对于\(T\)串一定是从左到右,能 ...

随机推荐

  1. protel99se无法添加库的解决方法

    protel99se是很老也很实用的的一门电类专业需要用到的软件,开发时面向XP,对于win7来说存在一定的不兼容性,导致无法添加新的库,本经验为此介绍解决方法.最全,末尾解决win7 32bit 6 ...

  2. sql查询 ——聚合函数

    --聚合函数 -- sum() -- 求和 select sum(age) from student; -- count() -- 求数量 -- 数据量 select count(*) as '数量' ...

  3. python logging模块日志回滚RotatingFileHandler

    # coding=utf-8 import logging import time import os import logging.handlers def logger(appname,roots ...

  4. MSSQL 打开xp_cmdshell

    sp_configure reconfigure go sp_configure reconfigure go

  5. IDEA常用操作链接

    idea中svn的提交.更新等操作 https://jingyan.baidu.com/article/375c8e19e3c47a25f3a22955.html Idea 部署SVN详细步骤以及上传 ...

  6. STM32F103之ADC学习记录

    1.问题 1)10位ADC的误差是多少? 首先要分清分辨率与精度的区别. 10cm的尺子,有100个等分刻度,则该尺子的分辨率为1mm. 但不能说这把尺子的精度是1mm. 在冬天,尺子会热胀冷缩,依然 ...

  7. AcWing 104. 货仓选址

    #include <iostream> #include <algorithm> using namespace std; ; int n; int q[N]; int mai ...

  8. Linux - Shell - find - 进阶: 范围

    概述 继续昨天的 find 背景 还有一些 过滤条件 1. 约束: 目录层数 概述 约束目录的层级 选项 -maxdepth 作用 约束最大目录层级 相对路径 -mindepth 作用 约束最小目录层 ...

  9. OSS链接出现 connection pool shutdown错误修改

    在类中创建了OSSClient对象 ,方法共用此实例对象,在前端很短的时间内连续提交,造成异常错误. 解决方法时将OSSClient对象在方法中创建

  10. The Reason Why Cosmetic Airless Bottles Are Widely Used

    The contents of the Cosmetic Airless Bottles    can be isolated from the air, to prevent the product ...