Trie 练习记录】的更多相关文章

蒟蒻以前写的逊爆讲解 Trie CF665E Beautiful Subarrays 代码 把之前每个前缀和放进 trie 树里,然后 trie 树上查询即可. CF37C Old Berland Language 代码 建字典树,从短到长插入,维护每棵子树是否已满.…
/* poj 3321 Apple Trie 这道题的关键是如何将一个树建成一个一维数组利用树状数组来解题! 可以利用dfs()来搞定,我们在对一个节点深搜后,所经过的节点的数目就是该节点的子树的数目 所以我们利用start[i]数组来记录 i 节点在一维数组的起始位置, 而end[i]则是记录i节点所有孩子 节点最后一个孩子节点在数组的位置,那么end[i]-start[i]+1,就是 i 节点(包括自身)和其所有孩子节点的 数目.数组建好了,那么最后就是套用树状数组模板进行求解了! */ #…
题目链接:hdu_5790_Prefix 题意: 给你n个字符串,字符串总长度不超过10W,然后给你一个区间,问你这个区间的字符串不相同的前缀有多少个. 题解: 由于z与上一个答案有关,所以强制在线,区间询问可以用主席树搞搞. 不同前缀的话,我们可以用一个trie来记录每一个节点的最晚出现时间,也就代表了这个前缀最晚出现的时间,然后保存到对应的主席树中. 这样就转换为询问区间不大于l的数有多少个. #include<bits/stdc++.h> #define F(i,a,b) for(int…
4212: 神牛的养成计划 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 136  Solved: 27[Submit][Status][Discuss] Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变,原先决定神牛特征的基因序列都被破坏了,神牛hzwer很生气,但他知道基因突变的低频性,说不定还有以下优秀基因没有突变,那么他就可…
题目大意: 有n个字符串,编号为1~n,求每一个字符串在其他字符串中以它为后缀的字符串中编号第k小的字符串的编号. 思路: 将字符串倒过来建Trie,记录每个结尾节点的编号(可能会有重复,所以开一个vector记录).再对trie树进行dfs序,记录结尾节点的子树区间.区间第k小,自然用可持久化线段树(由于权值就是id,所以不用离散化). 注意:dfs序在遇到结尾节点时才++记录序号的变量cnt,而且相同串的dfs序号是一样的(就是说一个结尾节点可能包含好多个不同编号的串),左区间取最前的一个(…
从天上掉下来了个这样的问题: 有一个字符串 从中选出两个子串 A,B,求 A+B可以构成的不同串的个数. 还想知道,这么多个串中字典序最大的那一个. 某人捡到了这个问题,并把它扔给了你. [输入] 一个全由小写字母构成的字符串. [输出] 第一行 一个非负整数,表示两个子串A+B可以构成的不同串个数.由于答案可能很大,所以答案对1004535809取模. 第二行 一个字符串,表示构成的串中字典序最大的. [样例输入1] ab [样例输出1] 11 bb [样例输入2] abcaabccba [样…
很不错的一个题(注意string会超时) 题意:给你n串字符串,问你两两匹配形成n*n串字符串中有多少个回文串 题解:我们首先需要想到多串字符串存储需要trie树(关键),然后我们正序插入倒序匹配就可以O(len)找到回文串个数了. 但是如果每次直接查询到结尾的话会漏掉两种情况 如:  1:a 与 ba 匹配(使用的是ab去匹配a) 2:ab 与 a 匹配 对于2这种情况我们需要在trie树记录每个字符串每个后缀可以形成回文串的个数(建树时就维护),对于1我们则需在匹配时看查询串每个后缀是否形成…
传送门 完了我连sg函数是个啥都快忘了 设\(sg[u]\)为以\(u\)为根节点的子树的\(sg\)函数值,\(rem[u]\)表示\(u\)到根节点的路径删掉之后剩下的游戏的异或值 根节点\(u\)的\(rem\)就是它所有子树的异或值,然后对它的每个儿子\(v\)来说,它们的\(rem\)需要异或上\(rem[u]\bigoplus sg[v]\) 对于每一个节点,最小的不出现在子树的\(rem\)集合中的值就是它的\(sg\) 那么子树的\(rem\)集合向上的合并的时候,就是一个集合,…
题目大意: 有一棵树,根节点为1.每个点有点权.有两种操作. 1. 求节点x所在子树中点权与y异或的最大值.2. 求x到y的路径上点权与z异或的最大值. 解题思路: 可持久化字典树. 对于第一种操作,我们对树进行dfs遍历,求出每个节点的dfs序(树剖),然后由于子树中dfs序连续,所以相当于区间的询问.对每个1~x区间建trie即可. 对于第二种操作,我们对每个节点建一颗trie,记录其到根的路径上的信息. 然后常规求LCA,减一减即可. C++ Code: #include<bits/std…
WOJ#3831 TJOI2013单词 题面 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. 输入 第一个一个整数 N ,表示有多少个单词,接下来 N 行每行一个单词. 输出 输出 N 个整数,第 i 行的数字表示第 i 个单词在文章中出现了多少次. 样例输入 3 a aa aaa 样例输出 6 3 1 提示 对于全部数据,1≤N≤200 ,所有单词长度的和不超过 106,保证每个单词由小写字母组成. 题解 本题中,第2行到…