随笔分类 - 数据结构—字典树
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4757 题意: 给出一棵树,每个结点有一个权值,现在有多个询问,每次询问包含x,y,z三个数,求出在x到y的路径上与z最大的异或值。 思路: 看着别人的代码做完这道题目之后觉得这题和主席树求第k小是异曲同工的,主席
阅读全文
摘要:https://vjudge.net/problem/UVA-11488 题意: 给定一个字符串集合S,定义P(s)为所有字符串的公共前缀长度与S中字符串个数的乘积。比如P( {000, 001, 0011} ) = 6。给n个01串,从中选择一个集合S,使得P(S)最大。 思路: 建立字典树,边插
阅读全文
摘要:http://codeforces.com/contest/706/problem/D 题意:有多种操作,操作1为在字典中加入x这个数,操作2为从字典中删除x这个数,操作3为从字典中找出一个数使得与给定的数的异或值最大。 思路: 因为这道题目涉及到删除操作,所以用一个变量cnt来记录前缀的数量,加入
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4825 题意: 给出一些数,然后给出多个询问,每个询问要从之前给出的数中选择异或起来后值最大的数。 思路:将给出的数建立01字典树,从高位开始建树。对于每个询问,如果当前位置值为0,那么在字典树中,如果有1的值,那
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1298 题意:模拟手机9键,给出每个单词的使用频率。现在给出按键的顺序,问每次按键后首字是什么(也就是要概率最大的)。 思路: 先建立字典树算出每个前缀出现的概率,然后dfs每种情况,选择概率大的。
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1247 题意: 给出一些单词,问哪些单词可以正好由其他的两个单词首尾相连而成。 思路: 先将所有单独插入字典树,然后对于每一个单词,枚举它的分割点,去字典树中查找是否具有这两个单词。
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意:给出一些单词,然后有多次询问,每次输出以该单词为前缀的单词的数量。 思路: 字典树入门题。
阅读全文
摘要:1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 const int maxn = 4000 * 1000 + 10; 9 int n; 10 long long ans; 11 12 struct Trie 13 { 14 int head[max...
阅读全文
摘要:http://poj.org/problem?id=2513 题意: 给定一些木棒,木棒两端都涂上颜色,求是否能将木棒首尾相接,连成一条直线,要求不同木棒相接的一边必须是相同颜色的。 思路: 题目很明显的是欧拉道路的问题。 欧拉道路的关键是: ①图是连通的。 ②最多只能有两个奇点。(不能只存在一个奇
阅读全文
摘要:http://poj.org/problem?id=3630 题意:给出一个电话号码列表,确定它是否一致,即没有数字是另一个的前缀。 思路: 边输入边建立字典树,通过字典树判断某个数是否是另一个的前缀很方便。
阅读全文
摘要:https://vjudge.net/problem/UVALive-3942 题意: 给出一个由S个不同单词组成的字典和一个长字符串。把这个字符串分解成若干个单词的连接,有多少种方法?比如,有4个单词a、b、cd、ab,则abcd有两种分解方法:a+b+cd和ab+cd。 思路: 建立字典树,查询
阅读全文