字典树
timidcatt
永远不要放弃战斗
展开
-
2022 ICPC 杭州 K. Master of Both gym104090K
思路:一个字符串要比另一个字符串大只要最长公共前缀后面的一个字母更大即可,所以我们建立字典树来储存n个字符串,然后记录以p为前缀的字符串数量cnt[p],然后对于每个节点,统计这个节点和子节点组成的数对数量pa,即子节点的cnt,对于每次询问,遍历每两个字母i,j,pa[i][j]即为最长公共前缀后面一个字母分别为i和j时的字符串数。题目大意: 有n个字符串和q次询问,每次询问给出一个不同的字母表,问这n个字符串中有多少逆序对。原创 2023-01-03 17:21:52 · 450 阅读 · 0 评论 -
Keywords Search hdu2222
思路:AC自动机模板题,先构建好字典树,然后构建失配指针,在匹配时沿着失配指针的方向走,在遍历的过程中累计出现过的单词数量,例如统计在字符串shers中出现过几个单词,我们先用he,her,hers,his,she即个单词构建字典树如下。,匹配成功she,5号节点的失配指针指向2号节点,又匹配成功he,继续匹配第四个字符r,5号节点的r子节点指向其失配指针的r子节点,因此访问8号节点,继续匹配第5个字符s,匹配成功hers。题目大意:有n个单词,和一个长度为1e6的字符串,问这个字符串中出现过多少个单词。原创 2022-11-21 19:34:28 · 88 阅读 · 0 评论 -
The xor-longest Path poj3764
思路:因为异或和可以忽略重合的部分,所以两个点之间的路径的异或和就是每个点到他们的公共组先的异或和,那么我们直接从第一个节点出发dfs记录每一个点i(包括第一个点)到第一个点的异或和dx[i],然后我们只需要在所有的dx中找出异或值最大的两个点,用字典树可以做到O(n),trie[i][j]表示二进制从左到右忽略公共前缀的第i位数字是j,对于一个要查询的dx[i],我们在字典树中优先查找与每一位数相反的前缀,得到的便是最大值。边权树如上图,可得出0到各点的异或和dx为0,7,5。...原创 2022-08-25 19:36:53 · 123 阅读 · 0 评论