- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Trie树解题报告
湖南省第六届ACM程序设计大赛怀化学院暑期培训 数据结构—Trie树 目 录 POJ 2513 Colored Sticks 题意 有若干根木棒,每根木棒两端都涂有颜色,问是否可以将这些木棒拼成一条长的木棒,要求相邻的两根木棒的接口处的颜色一样。 POJ 2513 Colored Sticks 输入 输入每一行为一根木棒两端的颜色,颜色单词不超过10个字母。总木棒数数不超过250000根。 输出 如果能拼成一根长木棒,则输出“Possible”,否则输出“Impossible”。 POJ 2513 Colored Sticks 样例输入 blue red red violet cyan blue blue magenta magenta cyan 解题思路 这个题目涉及了多个基本数据结构和算法 虽然简单,但是很有代表性 知识考查点: 1,字典树;2,欧拉路:其中又考察了判断是否为连通图;3,并查集; 解题思路 题意不难理解,可是我们得巧妙的转化一下,我们把棍子头的颜色当作节点,棍子就当作线 于是就形成了下面的图 解题思路 那么问题就可以转化为将这个图一笔画,要求每根线段都要走到而且只能走一次,于是这就转化为了欧拉路的判断,即亮点。 一个图为欧拉图的条件充要条件是: (1)图是联通性; (2)该图每个点的度数要么全为偶数,要么有且仅有两个点的度数为奇数。 解题思路 由于最多可能有500000种颜色(单词)要求判断,一是判断该颜色是否出现过,二是判断该颜色出现了多少次(度数),所以如果采用常规的数组存储结构,并逐个单词进行比较,显然将产生超时。 解题思路 本题只能采用字典树的存储结构,才能最大限度地优化存储,并提高查找效率。 关于字典树的相关知识,可以参考相关书籍。 作者认为,字典树其实就是一棵多叉树,任意一个结点可以有多个孩子结点,针对英文单词的字典树,可以认为是一棵26叉树,即每个结点可以有26个孩子结点。 每个结点表示一个字母,前缀相同的单词共用相同的祖先结点,从根结点到任意结点的字母组合可认为是一个单词。 通常在某个结点上会再增加一个标志,标明到此是否为一个单词。 解题思路 假设有b,abc,abd,bcd,abcd,efg,hii这6个单词,我们构建的树就是这样的。 解题思路 其结构体可以定义如下: typedef struct trieNode { int n; //颜色序号或标志,标志是否为单词 struct trieNode *next[Len]; }Trietree; //定义一棵Trie树 解题思路 借助上面Trie树的定义后,本题再定义如下变量: #define maxn 500001 int num=0; //颜色序号 int a[maxn]; //a数组用来存放每种颜色出现的次数,即该点度数 int f[maxn]; //存放连通分量号,即根结点序号 int count_f[maxn]; //存放各颜色点所在的连通分量包含的结点数 解题思路 num变量用来表示颜色,第一次出现的用0标志,第二次出现的用1标志,以此类推。 每读入一种颜色,通过Trie树判断该颜色是否已经存在,如果存在,相应颜色度数增加1,如果不存在,插入该颜色到Trie树,设置新的颜色序号及其度数。 一行两种颜色,表示一条边的两个端点,读入两种颜色后,要将这两个端点合并到同一个连通分量中,即并查集算法。 合并方法是分别求得两个端点所在连通分量的根结点,以其中一个根作为另一个结点的根,并通过count_f记录下该连通分量包含的结点数。 完成上述操作后,通过count_f可以查询是否存在某个连通分量包含了所有的结点,如果存在,表示图连通,否则不连通。通过各点度数,判断是否只有两个结点为奇数度或全为偶数度,如果是,表示该图为欧拉图,否则不是。 谢 谢 * * 计算机科学与技术系 黄隆华 3 4 1 2 POJ 2513 Colored Sticks Trie树 样例输出 Possible * *
您可能关注的文档
最近下载
- 中级财政税收-中级经济师《财政税收实务》押题密卷2.docx VIP
- 陕西煤业化工集团有限责任公司生产安全事故应急预案(1).pptx VIP
- DB65T 4929-2025儿童福利机构 义务教育阶段重度残疾儿童少年送教上门服务指南.docx VIP
- 建筑抗震支吊架通用技术条件.pdf VIP
- 医学基础知识复习资料.docx VIP
- 全口义齿汇总.ppt VIP
- 如何购买电脑.pptx VIP
- 急性一氧化碳中毒诊治专家共识.pptx VIP
- (正式版)DB65∕T 4929-2025 《儿童福利机构 义务教育阶段重度残疾儿童少年送教上门服务指南》.docx VIP
- 《混凝土外观质量缺陷及治理措施》ppt课件模板.ppt VIP
原创力文档


文档评论(0)