![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字典树
给我一瓶AC钙
是一颗萌菜没错了
展开
-
(CodeForces) L - LRU Algorithm Gym - 102394L (模拟+字典树)
传送门题意:给定一个n个数的数字序列,第i个数为a[i],每次操作会将a[i]插入或移到最前端:1.若a[i]已经在序列中出现过,则将其移到最前端,并删除原出现位置2.若a[i]未出现过,则直接将其插入到最前端有q个询问,每个询问给出一个长度为m的序列,问是否在某个时刻询问序列与操作的序列相同,忽略后缀的0(就是操作系统中的LRU,刚好在学解:由于物理块的个数不知道,我们可...原创 2019-11-14 20:43:09 · 426 阅读 · 0 评论 -
字典树入门和例题
视频讲解戳这里何为字典树:如图所示:每个字符有很多个分支,打黄色标记的就是字符串的结尾,所以这颗字典树中有哪些字符串呢,"ab","ay","ayf","c","cc","cd",其他的枝没有画全。如何存储:顺序存储字符串:“ab”“ay”“ayf”“c”“cc”“cd”……(节点编号讲究先到先得)数组tree[i][j]:代表i节点的第j个儿子的节点编号。...原创 2019-01-29 13:23:59 · 567 阅读 · 4 评论 -
(POJ) 1816 Wild Words (字典树+搜索)
传送门题目大意:给你n个模板字符串和m个待匹配字符串,模板字符串中有‘?’可以匹配任意一个字符,‘*’可以匹配0个1个或者多个字符串。问待匹配字符串可以和哪些模板字符串相匹配。解题思路:我们可以将‘*’和‘?’分别放在26和27两个位置,存储字符串的时候,将每个字符串的最后一个节点返回存储起来,find不在和原来一样,而是一个搜索,当搜索的位置==len,而且当且节点为字符串的尾节点(fl...原创 2019-01-29 14:18:07 · 227 阅读 · 0 评论 -
(HDU) 1247 Hat's Words (字典树)
传送门题目大意:给你字符串,输出其中能由其他两个字符串组合而成的字符串。解题思路:建立两颗字典树,一颗正序,一颗反序,开一个vis数组,find的时候正序find一下,如果字符串的第i位有其他字符串flag标记,就vis[i]++,反序find的时候,同样不过是vis[len-i-2]++,标记正序的位置-1,最后从0~len-1,搜一遍,看有没有位置vis[i]>=2,有的话就说明...原创 2019-01-29 14:36:16 · 152 阅读 · 0 评论 -
(POJ) 2513 Colored Sticks (字典树/map+并查集+欧拉路径)
传送门题目大意:给你两段有颜色的木棒,只有相同的颜色才能连接起来,问你最后给你的木棒最后能不能拼成一根长木棒。解题思路:这里字典树只是返回了不同颜色的编号,用map<string,int>也是可以的,我们可以记录每个颜色的度,一个木棒的两个颜色可以相连,所以这里可以用并查集将不同的颜色并起来,最后如果,有颜色的祖先和其他不一样,那肯定不能连起来,反之那就要判断欧拉路径 了,如果...原创 2019-01-29 15:15:06 · 167 阅读 · 0 评论 -
(Luogu) P2922 [USACO08DEC]秘密消息Secret Message (字典树)
传送门解题思路:查询前缀的个数,典型的字典树问题(字典树入门和例题),给你一个前缀,如果单词(都称为单词了)与这个前缀的前部分重合时,res也++,这是需要注意的,例如:前缀10111,那么101也算一个答案;用一个sum数组记录到root这个点为前缀个数,同时flag数组为以root为结尾的单词的个数(flag从标记结尾,变成个数,因为可能有相同的单词数),查询前缀时,遇到flag不为0,那...原创 2019-02-20 11:42:59 · 119 阅读 · 0 评论 -
(可持久化字典树) 51nod 1295 XOR key
传送门题意:给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R)。求A[L] 至 A[R] 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少?思路:所有可持久化的树型结构都是一样的,每次只更新一支,沿用上一个树的一支。具体原理可以先看主席树的。/*可持久化字典树*/ #include<bits/...原创 2019-05-18 17:40:12 · 195 阅读 · 0 评论 -
(HDU) 6191 Query on A Tree (可持久化字典树+dfs序)
传送门题意:给你一颗树,每个点都有取值,q次查询,一个u,一个x,求以u为根的树的一个节点与x异或的最大值。思路:题目给了10000ms,暴力啊,失败了。这题需要用可持久化字典树,如果你不知道你可以先做一下这道题,这时候我们如果知道以u为根的树的起始root和最后root,那我们不就可以直接query嘛,这个我们只要在dfs的时候用个in数组和out数组来记录u的初始节点和结束节点就可以了...原创 2019-05-18 17:56:05 · 172 阅读 · 0 评论