随笔分类 -  字典树

摘要:比较基础的并查集,求集合所含元素的个数,中间用字典树给出现过的名字标号View Code #include<iostream>#include<algorithm>#include<string>#define MAXN 100000+10using namespace std;int f[MAXN],r[MAXN],n,num;typedef struct node{ int cnt; struct node *next[52];}*tree,Trie;tree root; inline int GetNum(char *t)//用字典树对字符串编号{ t 阅读全文
posted @ 2012-02-22 20:32 枕边梦 阅读(242) 评论(0) 推荐(0)
摘要:hdu 4039 The Social Network题意:给出N对好友关系,之后Q次提问,问可以对该用户推荐的相识度最高的好友;推荐好友满足的条件:该用户的所有好友的好友中,出现次数最多的,而且推荐好友本身不是该用户的好友;若有多个推荐好友时,按字典序输出;分析:嘿嘿,我的做法有点暴力,600+ms;首先对所有用户的名字(字符串)标号,好处理一些,这里用了字典树实现了;接下来,用邻接矩阵表示任意俩个用户直接的关系,再者,对与每一次询问,遍历该用户所有好友的好友,找出出现次数最多的;最后,若有多个推荐好友时,要字典树输出,额,我用优先队列做了,重载操作符,之后直接丢进去,再输出就可以了View 阅读全文
posted @ 2011-09-12 12:04 枕边梦 阅读(582) 评论(0) 推荐(0)
摘要:这题目郁闷死了,因为一些小错误,搞了半天,不过,要注意的东西真的很多哦题意是找出单词的所有符号要求的匹配模式,首先将模式存入字典树中,再用单词进行查找需要注意的问题:看到输出的sample也应该知道了,一个单词有多种匹配模式,用一个单词进行遍历时,到达同一个单词的结尾,却可能经历了不同的匹配模式,所以这里用了并查集来保存具体的,还是结合代码吧,比较好解释#include<iostream>#include<string>#include<algorithm>using namespace std;struct node{ int num;//保存模式的编号 阅读全文
posted @ 2011-05-16 17:22 枕边梦 阅读(363) 评论(0) 推荐(0)
摘要:唉,又这样贡献了一个WA,忘了把自己的用来测试的输出删了……一开始还真被这题目吓住了,不过花点心思想想,还是可以做出来的题意要求的是打印单词的最少操作数只有三个操作:输入,删除,还有打印,前缀就不需要重复输入,想到了字典树,这道题目也就好做了要 求最少的操作数,所以首先要归类,所有拥有相同前缀的单词,放在一块输入,题目还说,最后一次打印不需要删除理论上是像上面说的,但实际我们在计算最少操作数时,可以这样算,首先假设所有的单词都需要重新打印还有删除,所以总操作数是单词总长度*2接下来,计算出前缀,可以这样想,只需计算出每一个节点被哪些单词共有,如题目中的样例,“freeradiant”,“fre 阅读全文
posted @ 2011-05-15 18:07 枕边梦 阅读(1120) 评论(0) 推荐(0)
摘要:额,比较简单的字典树,找出一个单词最短而且唯一的前缀,就是不会跟其他单词重复这样的话,插入只需在每一个单词经过的路径的节点p->v上累加,查找时,检查p->v的值,当p->==1时,即到此节点为止的前缀是最短而且是唯一的不知道大牛的0ms是怎么做出来的,,我用了16ms,膜拜啊#include<iostream>#include<string>using namespace std;struct node{ node *next[26]; int v;};node *root;char str[1001][21];void insert(char *s 阅读全文
posted @ 2011-05-15 14:55 枕边梦 阅读(187) 评论(0) 推荐(0)
摘要:一道水题,居然改错改了一个多小时题目的意思是其实就是找出一个单词,前半部是一个出现过的单词,后半部也是,记住,要严格满足这个条件所以,其实也就是先查找一个单词的是否有前缀,再用这个单词除去前缀的部分查找是否存在一个这样的单词虽然题目说按字典序输出,但本身已经是按字典序输入了,所以排序也就省了#include<iostream>#include<string>using namespace std;struct node{ int v; node *next[26];};node *root;char str[50002][50];void insert(char *s) 阅读全文
posted @ 2011-05-15 14:15 枕边梦 阅读(1512) 评论(1) 推荐(0)
摘要:这题花的时间还真是不少呀,而且还是参考大牛思路的题意:首先将字典保存,然后对应输入的message的每一个数字,输出频率最大的前缀,若没有,则输出MANUALLY主要运用到了俩方面的知识,栈还有字典树,栈的实现主要是保存未遍历过节点,方便回溯这里主要有俩个地方需要注意一下:其一,就是每个单词中字母的频率,比如:“hell,3”和“hello ,4”,则前缀相同时,h的频率为4+3=7其二,就是在利用栈进行回溯,首先将输入的串中对应的每一个数字调用find()函数查找最大频率的前缀,查找过程中,其实这里相当于深搜了,注意体会栈的思想#include<iostream>#include 阅读全文
posted @ 2011-05-15 10:41 枕边梦 阅读(1076) 评论(0) 推荐(0)
摘要:额,跟hdu的1075很像,不过比那题简单多了,就是读入时有点麻烦,用到了一个函数具体看代码吧,这题没什么,不过我的内存开了太多了,不解……#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ node *next[26]; int v; char str[15];}*tree,t;tree root;void insert(char *s,char *s1){ tree p=root,newnode; for(;*s1!='\0';s1++) { 阅读全文
posted @ 2011-05-14 12:56 枕边梦 阅读(246) 评论(0) 推荐(0)
摘要:这题目其实也不难,要有勇气去写这个代码,额,不过我第一次TLE了,我以为应该会超时的,太小看这个三个循环了记录下八个方向,本来想一边读入一遍查找的,省得记录结果,不过真的太慢了,所以只好开 一个二维的数组记录咯,插入的操作基本跟之前的一样,就是查询的时候用递归的方式,这是为了方向看,同时写代码也轻松了许多啦,比较直观#include<stdio.h>#include<string.h>#include<stdlib.h>typedef struct node{ node *next[26]; int id;}*tree,t;tree root;int px, 阅读全文
posted @ 2011-05-13 21:48 枕边梦 阅读(169) 评论(0) 推荐(0)
摘要:这题目真的彻底无语了,因为一个小错误,检查了半天,就是一个累加变量被我重复用了悲剧呀,怪不得老是输出一些莫名其妙的东西整体的话,这应该也算是基础的字典树吧,,就是读入数据有些技巧,嘿嘿,不过好像可以用map做哦前面做过一道题,就是在一个串的末尾的节点处,标记一下,而这道题,在一个串的末尾处将该串对应 的英文插入#include<string.h>#include<stdio.h>#include<stdlib.h>typedef struct node{ node* next[26]; char str[10];}*tree,t;tree root;char 阅读全文
posted @ 2011-05-12 22:05 枕边梦 阅读(260) 评论(0) 推荐(1)
摘要:呵呵,这道题目的话,也不难吧,就是在节点中添加了俩个标志因为想要一边添加一边判断是否出现过某个串是某个串的前缀,所以需要添加这俩个标志一个是v,用来表示是否有一个串在该节点结束,这主要是针对前面的串中出现过当前串的前缀;另一个是f,用来标志当前当一个串结束时,它是否存在下一个节点,主要针对当前串是之前出现过的串的前缀添加这俩个标志之后,基本没什么问题了,对了,初始化还是很严重的问题,额,因为有一个地方忘记初始化了,结果wa了一次额,还有一个蛮严重的,就是每一个case之后,要释放空间,不然内存使用过大了,虽然大牛说过,但我还是固执的提交了一次,悲剧#include<stdio.h> 阅读全文
posted @ 2011-05-12 19:58 枕边梦 阅读(1188) 评论(0) 推荐(0)
摘要:并查集告一段落啦,先放下吧,今晚再做一下总结吧之后转入字典树的学习这道题目是比较基础的而且明显的字典树慢慢来吧题意比较明显,查找以某一个串为前缀的单词的数目,字典树还有一个名称,就是前缀树,所以就很明显了吧不过下面的代码用的是比较朴素的方法,root->next[],开的内存太大了,不过速度也相对快了root->cnt记录的是以从根节点到达该节点组成的串为前缀的单词的个数此题涉及到字典树的俩个基本操作,插入还有查找,代码很容易理解#include<stdio.h>#include<string.h>#include<stdlib.h>typede 阅读全文
posted @ 2011-05-12 14:12 枕边梦 阅读(958) 评论(3) 推荐(0)