算法学习
_Jyq
这个作者很懒,什么都没留下…
展开
-
hihocoder 后缀自动机
link重复旋律5求不同子串个数,SAM后统计所有节点的mx-mi+1即可#include <bits/stdc++.h>using namespace std;typedef long long ll;const int SZ = 26;const int maxn = 1e6+5;namespace SAM{ struct SamNode{int trans[SZ],slink,mi,mx;}sam[maxn<<1]; int tot; char s[maxn原创 2020-07-06 13:14:11 · 188 阅读 · 0 评论 -
后缀自动机
endpos相同的所有子串都会走到同一点。增量法构造,每新增一个字符,相当于多i+1个后缀,考虑这些后缀的endpos是否都为z(最长那个)。我们沿着slink_path(u)一直走,出现sam[u].trans[c]!=-1时说明发生endpos集合变化(即此后缀在之前出现过)这里又分两种情况1)对新增的串对状态x的endpos无影响2)产生影响,例:abcxabcxbc+x时 abcx 的endpos 由abcx,bcx,cx,x变为abcx+bcx的endpos。所以需要拆点。(待补)原创 2020-07-05 21:23:21 · 199 阅读 · 0 评论 -
Victor and String 回文树拓展
link前后端同时插入,增加前缀fail指针,发现对于每个节点,前缀fail和后缀fail相同。那么分情况直接更新就好了。并且在前面插入字符时不会影响原树的fail。因为每个节点的fail长度比他本身小。并且要注意,当插入一个节点时,如果它新生产的回文串的长度等于此时总串的长度,要同时更新L_last,R_last#include<bits/stdc++.h>using namespace std;typedef long long ll;///len表示当前节点对应回文子串长度原创 2020-06-25 12:02:33 · 179 阅读 · 0 评论 -
回文自动机
目录Palindrome auto machineQ1 节点会不会很多?Q2 怎么建树?Q3 建树后可以求什么?Q4 怎么求?模板例题:P5496Palindrome auto machine又称回文树,顾名思义,对于一个字符串的回文树来说,每个节点表示一个回文串。例:abbabba对应节点有:a,b,bb,bab,abba,bbabb用于统计某字符串有多少个回文子串之类问题。Q1 节点会不会很多?考虑每添加一个字符对回文树节点个数的影响如图所示,当添加c后,考虑以c为结尾最长的回文串A,原创 2020-06-23 20:31:37 · 1225 阅读 · 0 评论 -
楼教主 男人八题之一 Poj 1741 Tree
link树上距离小于等于k点对对数点分治模板首先考虑经过某一点zx的对数,那么我们可以通过dfs处理出所有点到zx的距离后求dis [a]+dis[b]<=k的个数(排序后双指针),但是这样算的时候还有可能两点没过zx,所以要容斥一下(减去所有以儿子节点为根的数量即为不经过zx的数量)。如果随便枚举zx的话,最坏复杂度会达到O(n^2)所以我们让每次枚举的点为重心,复杂度为O(nlog n) (每次都会减少大于s/2个节点)#include<bits/stdc++.h>#de原创 2020-06-17 13:06:08 · 160 阅读 · 2 评论 -
Pangu and Stones UVALive - 8177 区间dp
link石子合并变形,每次只能将[ L ,R ]堆石子合并为一堆.在普通石子合并dp [i] [j]上 添加一维 dp[i][j][k] 表示i~j区间还剩k大堆的最小花费那么dp[i][j][1]=min dp[i][j][z] l<=z<=r而当k>1时转移的意义相当于不断划分石子,有转移方程dp[i][j][k]=min dp[i][z][1]+dp[z+1][j][k-1]#include<bits/stdc++.h>#define ls rt<&原创 2020-06-16 19:29:58 · 145 阅读 · 0 评论 -
CDQ 分治
目录概述题目P3810P4169概述能够解决一些三维偏序 或者 二维矩阵上的 问题。第一维排序,第二维归并,第三位树状数组本质上就是利用归并排序的性质,在合并两个小区间的同时,由于小区间内的贡献已经算完,所以只剩下左边小区间对右边小区间的贡献,那么当我们在合并的时候对第三维维护一个树状数组即可算出三维偏序。剩下的就是一些细节问题:求偏序时,需要离散化,因为当某两点三维向量都相等时在归并过程中只计算了左边对右边的影响。题目P3810模板:P3810统计 对于0<=d<n, F(i原创 2020-06-09 23:13:11 · 287 阅读 · 0 评论 -
Master of Data Structure 虚树
链接m<2000建虚树后暴力维护虚树中两点间的实际点的个数 模拟即可巨丑的代码#pragma GCC optimize(2)#include<bits/stdc++.h>#define ls rt<<1#define rs rt<<1|1#define pb push_back#define fi first#define se se...原创 2020-04-22 17:27:40 · 932 阅读 · 4 评论 -
整除分块证明
原创 2020-04-04 21:15:10 · 292 阅读 · 0 评论 -
二分图
总结二分图的最大匹配:匈牙利算法二分图的最小点覆盖数 = 二分图最大匹配数二分图最大独立集 = 总点数 - 二分图最大匹配数(有向无环图)不可重叠最少路径覆盖数=原图点数 - 二分图的最大匹配前置知识:增广路:由未匹配点开始未匹配点结束,中间交错出现匹配边与未匹配边的一条路径。可以发现当我们把一条增广路的边交换性质之后,二分图的匹配数量就会➕1二分图最大匹配1匈牙利算法:枚举每个未...原创 2020-03-11 16:27:36 · 171 阅读 · 0 评论 -
树链剖分入门
例题POJ 3237()BZOJ 3083BZOJ 3531BZOJ 3589BZOJ 3626将树上问题通过dfs序的性质转换为区间问题,从而对树上修改时就可转化为相应的区间修改。再通过引入重儿子,重链一系列概念将时间复杂度也变成了可以接受的层次通过两次dfs求出树上一系列的信息void dfs1(int u){ sz[u]=1; dep[u]=dep[fa[...原创 2020-03-04 20:06:46 · 120 阅读 · 0 评论 -
AC自动机
洛谷P5357模板题形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边;本质上,AC 自动机是一个关于若干模式串的 DFA(确定有限状态自动机),接受且仅接受以某一个模式串作为后缀的字符串。将多个模式串建立一个Trie树后,假如现在要求模式串在一个文本串中出现的次数那么我们如果直接暴力在Trie树上匹配的话时间复杂度为O(文本串长度*模式串平均深度...原创 2020-01-31 17:28:23 · 169 阅读 · 0 评论 -
莫队
bzoj2038莫队入门题目目前没有理解的几点就是 当前区间L R的初始化问题,为什么要L=1,R=0? 还有在 更新过程中出现了cnt《0的情况?当题目要求的区间操作满足以下条件时可以应用莫队1)已知L,R区间答案可以O1求出【L-1,R】【L,R-1】【L+1,R】【L,R+1】2)支持离线3)数据范围最多最多不能超过1e6 ,1e5为合理数据范围对于莫队的时间优化方面主要在于如何对...原创 2020-01-27 22:26:38 · 112 阅读 · 0 评论 -
主席树
静态区间第k小原理很简单,利用重复信息保存插入每个数时的 权值线段树那么当求l~r的区间 时 只需要 将插入第r个数时的权值线段树root【r】 减去root【l-1】那么我们得到的其实就是L ~ R的权值线段树了 直接query即可普通权值线段树可以查询整体的第k小问题而主席树就是利用这一点保存每个时刻的权值线段树,这样当查询区间第k值时就能通过相减得到这个区间的权值线段树故主席树能...原创 2020-01-26 21:02:16 · 185 阅读 · 0 评论