摘要: http://poj.org/problem?id=1703只要两者的关系确定了,就将他们放入同一集合内,而另外增加一个表示关系的数组zt[]来表示该结点与其父亲的关系,0表示是同一类,1表示不同团伙,初始时集合只要自己一个元素,zt[]=0。#include//其实只有一个集合,只是在每条边上赋了值罢了,权值 #includeint bin[100002],zt[100002];int findx(int x){ int r=bin[x]; if(x==bin[x]) return bin[x]; bin[x]=findx(bin[x]);//递归方法查... 阅读全文
posted @ 2013-08-01 21:38 执着追求的IT小小鸟 阅读(146) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1251初学字典树词典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。1、性质 它有3个基本性质: 根节点不包含字符,除根节点外每一个节点都只包含一个字符。 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。 每个节点的所有子节点包含的字符都不相同。2、基本操作 其... 阅读全文
posted @ 2013-08-01 21:37 执着追求的IT小小鸟 阅读(170) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1182看了别人的技巧,最后自己才勉强写出:(摘自poj)kind[a]=0表示a与父节点属于同一类。kind[a]=1表示a吃父节点。kind[a]=2表示父节点吃a。 (后二种情况下的赋值可以改变,但对后续有点小影响)1.有一种关系b是a父节点,c是b父节点, a与c的关系可以表示为 (kind[a]+kind[b])%3 (延续性,适用于多个节点的延续,如3个节点根据二次计算即可完成)2.b是a的父节点,表示为kind[a]. 若父子节点相互反转,即a是b的父节点,kind[b]=(3-kind[a])%3 (反转性)根据延... 阅读全文
posted @ 2013-08-01 21:36 执着追求的IT小小鸟 阅读(208) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1043因为结果都是“12345678x”,目标状态固定,所以可以列举所有的可能,然后用哈希表标志,然后直接调用/*PKUojSource CodeProblem: 1077 User: 297752873Memory: 6728K Time: 313MSLanguage: C Result: AcceptedSource Code*/#include#include#include#define QueueSize 370000int f[8] = {1, 2, 6,... 阅读全文
posted @ 2013-08-01 21:34 执着追求的IT小小鸟 阅读(212) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1077题目的意思,就是通过不停的移动空格,把开始的状态转化成目的状态12345678x目前能力只是到简单的单向bfs,还看了全排列的hash函数总的求解流程1.把开始结点压入队。 2.把开始结点状态写入哈希表 3.出队,访问结点。 4.创建结点的子结点,检查是否为目标状态。若是,搜索结束,若否,检查哈希表是否存在此状态。若已有此状态,跳过,若无,把此结点压入队。 重复3,4步骤,即可得解。 最后,我们根据目标状态结点回溯其父节点,可以得到完整的路径。/*PKUojSource CodeProblem: 1077 User: 2... 阅读全文
posted @ 2013-08-01 21:33 执着追求的IT小小鸟 阅读(230) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1232模板题算出共有几个集合就好。并查集其实就是几棵树形成的森林#include "stdio.h"int bin[1002];int findx(int x){ int r=x; while(bin[r] !=r) r=bin[r];//当父亲结点不是自身,也就是还没到达根结点的时候就持续往前递推,这里也可以用递归方法,而且也更好:if(bin[r]==r)return r;bin[r]=findx(bin[r]);return bin[x]; return r;}void ... 阅读全文
posted @ 2013-08-01 21:27 执着追求的IT小小鸟 阅读(102) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1077思路并不难,只是调的过程中有些问题,懒得写,从高手那转来的双向广度优先搜索算法是对广度优先算法的一种扩展。广度优先算法从起始节点以广度优先的顺序不断扩展,直到遇到目的节点;而双向广度优先算法从两个方向以广度优先的顺序同时扩展,一个是从起始节点开始扩展,另一个是从目的节点扩展,直到一个扩展队列中出现另外一个队列中已经扩展的节点,也就相当于两个扩展方向出现了交点,那么可以认为我们找到了一条路径。双向广度优先算法相对于广度优先算法来说,由于采用了从两个跟开始扩展的方式,搜索树的深度得到了明显的减少,所以在算法的时间复杂度和空间复杂度上都有较 阅读全文
posted @ 2013-08-01 20:55 执着追求的IT小小鸟 阅读(265) 评论(0) 推荐(0) 编辑