BZOJ3879 SvT(后缀树+虚树)】的更多相关文章

bzoj3879 SvT(后缀自动机+虚树) bzoj 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示),求这些后缀两两之间的LCP(LongestCommonPrefix)的长度之和.一对后缀之间的LCP长度仅统计一遍. 题解时间 bzoj3238 完 全 一 致 只不过这个是只选中其中一部分后缀. bzoj3238可以用SA搞也可以用SAM搞. 这题一样,但是SAM好想. 建完SAM每次询…
仙人掌 && 圆方树 && 虚树 总结 Part1 仙人掌 定义 仙人掌是满足以下两个限制的图: 图完全联通. 不存在一条边处在两个环中. 其中第二个限制让仙人掌的题做起来十分舒服. 仙人掌的基环DP 首先勾出一棵有根生成树. 那么树边上正常转移即可. 我们把返祖边形成的环归到环上深度最浅的点上,即环顶. 那么到环顶时,单独跑一遍关于环的\(DP\)即可. 一般写法为: void dfs(RG int u,RG int From) { dfn[u] = low[u] = +…
喜闻乐见的圆方树+虚树 图上不好做,先建出圆方树. 然后答案就是没被选到的且至少有两条边可以走到被选中的点的圆点的数量. 语文不好,但结论画画图即可得出. 然后套路建出虚树. 发现在虚树上DP可以得出答案. 所以在虚树上DP即可. 代码极丑 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespac…
对反串建SAM得到后缀树,两后缀的lcp就是其在后缀树上lca的len值,于是每次询问对后缀树建出虚树并统计答案即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define ll long long #define N…
题目描述 记 $lcp(i,j)$ 表示 $i$ 表示 $i$ 这个后缀和 $j$ 这个后缀的最长公共后缀长度给定一个字符串,每次询问的时候给出两个正整数集合 $A$ 和 $B$,求$\sum_{i\in A,j\in B}lcp(i,j)$ 的值.   题解: 对反串建立后缀自动机. 这样,任意两个后缀树节点所代表的字符串的 $LCP$ 值就是两点最近公共祖先在自动机中的 $len$ 值. 问题转化为 $\sum_{i\in A,j\in B}len[LCA(id[i],id[j])]$ 其中…
题意 有一棵 \(n\) 个节点且以 \(1\) 为根的树,把它复制成 \(m\) 个版本,有 \(q\) 次操作,每次对 \([l, r]\) 这些版本的 \(v\) 节点到根的路径收缩起来. 收缩 \(v\) 也就是把 \(v\) 到根路径上(除了根)所有点的父亲都变成根. 最后查询每个版本的每个点的 \(dep\) 之和. 数据范围 \(n, m, q \le 2 \times 10^5\) 题解 操作顺序是无所谓的,我们假设操作了点集 \(S\) ,那么最后被缩上去的点其实就是 \(\{…
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1868.html 题目传送门 - 51Nod1868 题意 给定一颗 $n$个点的树,每个点一个 $[1,n]$ 的颜色.设 $g(x,y)$ 表示 $x$ 到 $y$ 的树上路径上有几种颜色. 对于一个长度为 $n$ 的排列 $P[1\cdots n]$ ,定义 $f(P)=\sum_{i=1}^{n-1}g(P_i,P_{i+1})$ . 现在求对于 $n!$ 个排列,他们的 $f(P)$ 之和…
SADPAIRS 删点不连通,点双,圆方树 非割点:没有影响 割点:子树DP一下 有不同颜色,所以建立虚树 在圆方树上dfs时候 如果当前点是割点 1.统计当前颜色虚树上的不连通点对,树形DP即可 2.统计所有颜色的虚树上的不连通点对.... 一个麻烦事是,虚树上一条边上选择一个原树割点,都会对这个虚树造成相同的影响(两边sz乘积) n,m 2e5 树上差分 设虚树上,(x,y)的边,x是y的父亲 原树上,x的位置减去贡献,y的原树father位置加上贡献 最后dfs扫一遍就行了. 实际上麻烦事…
Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着道路走到任意其他城市. 现在小C已经占领了其中至少两个城市,小Q可以摧毁一个小C没占领的城市,同时摧毁所有连接这个城市的道路. 只要在摧毁这个城市之后能够找到某两个小C占领的城市u和v,使得从u出发沿着道路无论如何都不能走到v,那么小Q就能赢下这一局游戏. 小Q和小C一共进行了q局游戏,每一局游戏会…
https://www.luogu.org/problemnew/show/P4606 把原来的图的点双联通分量缩点(每个双联通分量建一个点,每个割点再建一个点)(用符合逻辑的方式)建一棵树(我最开始建的想法就有问题,答案竟然还差不多,查了好久才发现……然后重新想了个正确的建法发现比之前那个错误的建法好写多了,气),然后把这棵树整成虚树再做个树上dp就(安排得)明明白白的了.dp的时候注意一下树的根的值也要统计. 我的程序大概常数太大了洛谷开O2才能过,BZOJ会tle,也不想改了,就这样吧………