BZOJ4231 : 回忆树】的更多相关文章

一个长度为$|S|$的串在树上匹配有两种情况: 1.在LCA处转弯,那么这种情况只有$O(|S|)$次,暴力提取出长度为$2|S|$的链进行KMP即可. 2.不转弯,那么可以拆成两个到根路径的询问. 对所有串的正反串建立AC自动机,求出fail树上每个点的DFS序. 然后DFS原树,记录在AC自动机上走到了哪个点,在那个点$+1$,回溯的时候$-1$. 那么一个询问的答案就是fail树上的子树和,树状数组维护即可. 时间复杂度$O(n\log n+|S|)$. #include<cstdio>…
题目大意 \(n\)个点的树,每条边上有一个小写字母. 操作:给定2个点\(u\),\(v\)(\(u\)可能等于\(v\))和一个非空字符串\(s\),问从\(u\)到\(v\)的简单路径上的所有边按照到\(u\)的距离从小到大的顺序排列后,边上的字符依次拼接形成的字符串中给定的串\(s\)出现了多少次. \(n,m\leq 10^5,\sum|s|<=3\times 10^5\) 题解 离线 当\(u->v\)路径上的字符组成的串的子串匹配上询问串时,记\(x\)为\(u,v\)的lca,…
[BZOJ4231]回忆树 Description 回忆树是树. 具体来说,是n个点n-1条边的无向连通图,点标号为1~n,每条边上有一个字符(出于简化目的,我们认为只有小写字母). 对一棵回忆树来说,回忆当然是少不了的. 一次回忆是这样的:你想起过往,触及心底…唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定2个点u,v(u可能等于v)和一个非空字符串s,问从u到v的简单路径上的所有边按照到u的距离从小到大的顺序排列后,边上的字符依次拼接形成的字符串中给定的串s出现了多少次. Inp…
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能等于 \(v\))和一个非空字符串 \(s\) ,问从 \(u\) 到 \(v\) 的简单路径上的所有边按照到 \(u\) 的距离从小到大的顺序排列后,询问边上的字符依次拼接形成的字符串中给定的串 \(s\) 出现了多少次. 输入 第一行 \(2\) 个整数,依次为树中点的个数 \(n\) 和回忆的…
题解: 树上的串匹配,模式串的总长$|S|$,令$\overline {S} $为$S$的反串: 对$S$和$\overline {S} $分别建自动机 $u -> v$可以分成三个部分去统计 ①跨越了$lca(u, v)$的部分,长度不会超过$2|S|$,$kmp$暴力统计答案: ②$(u,lca)$上不跨越$lca$的部分,差分变成两个到根的询问: ②$(lca,v)$上不跨越$lca$的部分,差分变成两个到根的询问: $dfs$原树并记录走到两个自动机的节点$x / y$,$BIT$维护$…
哈夫曼树 哈夫曼树也叫最优二叉树(哈夫曼树) 问题:什么是哈夫曼树? 例:将学生的百分制成绩转换为五分制成绩:≥90 分: A,80-89分: B,70-79分: C,60-69分: D,<60分: E. if (a < 60){ b = 'E'; } else if (a < 70) { b = ‘D’; } else if (a<80) { b = ‘C’; } else if (a<90){ b = ‘B’; } else { b = ‘A’; } 判别树:用于描述分类…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
这题一场模拟赛我们出了弱化版(n<=1e6),抄题面给的程序能拿到71分的好成绩 其实后面的29分是加了几个1e9的数据卡人 这糟老头子真是坏得很 正解我们机房看了三天 在这里感谢这篇题解的作者,代码解释得很清晰~ 经过打表观察,可以发现:当\(1\le x \le k\)时 如果 \(k\) 为奇数,\(x*2^{y}\) \(mod\) \(k\)的值成环 如果 \(k\) 为偶数,质因数分解\(x\),如果所含因子\(2\)的次数大于\(k\)所含因子\(2\)的次数,那\(x*2^{y}…
题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远不会变为\(0\),也就是说最低位所在的位置是不变的,并且\(1\)到\(n\)会被分成若干条链,链上我们可以用线段树之类的搞一搞 然而如果\(k\)不是奇数的话事情就会变得比较辣手了--不过我们可以发现对于所有满足\(x=a\times 2^s\)的数,如果\(k=b\times 2^t\)且\(…
正解:倍增+线段树 解题报告: 传送门! $umm$这题有个对正解毫无启发的部分分还有个正解,都挺神仙的所以我都写了趴$QAQ$ 先说部分分 可以考虑把$x$向$x+lowbit(x)$连边,然后当$x+lowbit(x)$已经大于$n$了就指向一个超级根 这样儿每次执行一次$(x,v)$操作就相当于在树上一条链上的每个点全部$xor=v$,然后查询就是单点查询权值 然后就线段树或者树状数组维护一波就好$QwQ$ 这里可以解决$n\leq 2e5$的部分分辣 然后就港下正解 首先考虑$k$是奇数…