
数据结构
SimpleLifeT_T
github账号:lihongqiang
展开
-
并查集
并查集:http://dongxicheng.org/structure/union-find-set/转载 2013-03-03 20:10:05 · 367 阅读 · 0 评论 -
LA3135 优先级队列模版题
优先级队列priority_queue优先级函数写法:struct Item{ int QNum,period,time; //优先级比较函数,优先级高的先出队 bool operator <(const Item& a)const//注意这里要加const { return time>a.time||(time==a.time&&QNum>a原创 2013-08-24 22:02:23 · 658 阅读 · 1 评论 -
map与hash_map set multipleset
map和hash_map都是用来映射,就是一个集合对应另一个集合。hash_map比较省时间吧。比较常用的函数:count(第一个集合的元素),返回个数。map[s1]=s2;set和multipleset主要区别在于是否可以取重,主要用来记录某个元素出现的次数。count();返回的是元素出现的个数原创 2013-08-24 22:07:08 · 880 阅读 · 0 评论 -
Never Wait for Weights
Never Wait for WeightsIn a laboratory, an assistant, Nathan Wada, is measuring weight differences between sample pieces pair by pair. He is using a balance because it can more precisely meas原创 2013-08-12 14:37:04 · 961 阅读 · 0 评论 -
Uva11997 优先级队列的应用 多路合并问题
这题的题意就是给你k个数组,没个数组里有k个值,然后让你求从这k个数组中取一个数,所得的前k个最小的和。这里应用到了优先级队列,先合并两个数组,求出最小的k个和,然后依次合并其他数组。这里对于优先级队列的内部函数写的还是不很熟练,以后应该会好点。代码:#include#include#include#include#include#include#include#de原创 2013-08-25 13:01:22 · 681 阅读 · 0 评论 -
LA3644 利用并查集判断是否有环
这题是并查集的典型应用,判断是否存在环,即两个点的祖先是否相同,这题要求不能有环,要删除的边数。代码:#include#include#include#include#include#include#include#include#define maxn 100005#define INF 0xfffffff#define mem(a,b) memset(a,b,siz原创 2013-08-25 13:38:27 · 1129 阅读 · 0 评论 -
LA3027 并查集 压缩路径+维护距离
这种类型的并查集不仅要压缩路径,而且每次在压缩路径的时候要更新每个点到树根的距离,每次只把一个集合的根与另一个集合的一个元素连边,距离都是在访问的时候更新的。一开始还是不太会写,不过思想应该理解啦~~~代码:#include#include#include#include#include#include#include#include#define maxn 20005原创 2013-08-25 14:49:07 · 801 阅读 · 0 评论 -
LA 4329 树状数组(BIT) 维护更新一段区间的前缀和
树状数组(BIT)的标准用法:动态地修改单个元素值,并求前缀和。这题要求某个元素前面比它小的元素个数和后面比它小的元素个数,可以用两个输转数组维护。代码:#include#include#include#include#include#include#include#include#define maxn 20005#define maxm 100005#defin原创 2013-08-26 16:02:41 · 830 阅读 · 0 评论 -
Uva11235 RMQ ST算法
RMQ问题求区间的最值问题:http://blog.chinaunix.net/uid-20760412-id-1872571.htmlhttp://blog.youkuaiyun.com/detective_xin/article/details/7211135这题的想法也很好,一开始直接是不能用RMQ的,这里用到了游程编码,将相同的连续数字压缩成一段,记录这段的数据个数,然后用RMQ算原创 2013-08-26 20:35:40 · 709 阅读 · 0 评论 -
poj3225 区间更新+染色+区间异或+开闭区间划分
题意:给你一些区间的操作,然后利用线段树来模拟,最后求最长区间。这题比较复杂,主要是怎么处理这些操作。覆盖的话,只要用col【】数组来搞就行了,有三种状态,-1,0,1,分别表示区间是否被覆盖,全覆盖为0,全覆盖为1。异或操作的话,在开个Xor【】数组来记录改区间是否被异或过,向下传递异或。覆盖操作:把异或标记设置为0,因为覆盖了之后,以前的异或操作就可以不用进行。异或操作原创 2013-08-29 17:04:59 · 799 阅读 · 0 评论 -
LA3942 字典树+ dp
这题dp思想很简单,主要用到了字典树记录单词是否出现,即字典的功能。不过刚开始做数据结构的题,还没有联想到和dp结合。这是一次思维的突破吧。还有就是计算字典树节点的个数,得用字符串的长度*个数得来。代码:#include#include#include#include#include#include#include#include#define lson l,m,rt<原创 2013-08-30 11:36:19 · 819 阅读 · 0 评论 -
Uva11468 AC自动机+概率dp
这题把AC自动机和dp结合了下,题意就是给你一些模式串,给你选择每个字符的概率,让你选择L个字符,求不出现模式串的概率。先把模式串都插入AC自动机,用一个match数组记录该节点是否是单词节点,特别注意下这里单词节点可能是从0节点开始,也肯能由后缀构成单词节点,所以得加一句match[i]|=match[f[i]],即失配指针指向的点如果是单词节点也可以构成改点。这题的dp思想比较简单:原创 2013-08-31 15:08:32 · 695 阅读 · 0 评论 -
KMP 小结
看了这位大神的博客:http://www.cnblogs.com/wuyiqi/archive/2012/01/05/2313746.html花了一个上午的时间把题都A了,对KMP的前缀与后缀,以及循环节问题有了一定的了解。特别是next[]数组,可以记录前缀和后缀相同的长度,如果这个长度没有超过一半的话,就可以求字符串的循环节n-next[n]。先附下KMP模版:void getne原创 2013-07-31 14:08:38 · 626 阅读 · 0 评论 -
LA3026 KMP 关于循环节的问题
题意:询问字符串前i个字符是否有循环节,求最小循环节的个数。KMP的next函数有很多作用:1.next[i]表示一个串与模式串的i位置的字符如果匹配不成功,下一个匹配的位置。2.j=next[i]表示字符串中第i个字符与第j个字符相同(这里下标从1开始计算)3.j=next[i]表示前j个字符与后j个字符相同,即0-(j-1)与(i-j+1)-(i)相同。这题可以用到i-ne原创 2013-08-30 19:41:46 · 726 阅读 · 0 评论 -
LA4670 AC自动机模版题
题意:给你一些模式串和一个文本串,求在文本串中出现次数最多的模式串,输出次数和这些模式串。文本串很长,模式串数量多但长度短,适用于AC自动机。第一写AC自动机,基本照着敲的,不过稍微懂了些,希望早点掌握啦。这题直接先建一个AC自动机,把串都编号,用map来防重复,在AC自动机里用一个cnt数组记录所有串的编号的出现次数,最后遍历所有串的边号,找出最多的次数,然后在遍历所有的字符串,找出原创 2013-08-30 23:58:17 · 607 阅读 · 0 评论 -
后缀数组 小结
单独把它列出来是因为这个东西真的很神奇~~~后缀数组经典思想:多串合并+二分答案+最优性--->可行性例 1 :最长公共前缀给定一个字符串,询问某两个后缀的最长公共前缀。 // 直接套用,ans=min( height[ i ] )+rmq k例 2 :可重叠最长重复子串给定一个字符串,求最长重复子串,这两个子串可以重叠。 // ans=max( he转载 2013-08-01 08:57:30 · 719 阅读 · 0 评论 -
hdu1671字典树入门题
Phone ListTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 7110 Accepted Submission(s): 2441Problem DescriptionGiven a list of pho原创 2013-07-31 20:45:24 · 641 阅读 · 0 评论 -
栈的应用
http://jpkc.glxy.sdu.edu.cn:9053/html/wangluoketang/shoukejiaoan/disanzhang-zhanheduilie/section3-2转载 2013-03-03 20:19:06 · 326 阅读 · 0 评论 -
线段树 成段更新
hdu1698:#include#define maxn 111111#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1int sum[maxn<<2];int col[maxn<<2];void PushDown(int rt,int m){ if(col[rt]) { sum[rt>1))*co原创 2013-03-10 15:01:55 · 565 阅读 · 0 评论 -
二叉树的遍历及操作
#include using namespace std;//定义树的结构typedef struct _binTree{ char data; _binTree *lNode,*rNode;}binTree;//创建二叉树void createT(binTree *&rootNode,binTree *tempNode){ if(ro转载 2013-03-03 20:13:11 · 562 阅读 · 0 评论 -
线段树 单点更新
线段数:http://dongxicheng.org/structure/segment-tree/http://hi.baidu.com/semluhiigubbqvq/item/be736a33a8864789f4e4ad18http://www.notonlysuccess.com/index.php/segment-tree-complete/ 经典单点更新:hdu1166#include原创 2013-03-03 20:20:20 · 373 阅读 · 0 评论 -
线段树 区间合并
hdu3667:题意:定义两种操作,询问最大连续的空间,返回首地址;清除以及将一段区间置1。思路:线段树,定义三个数组分别表示从左,右,中,的最大连续长度,注意向上更新时合并区间的操作。写了一段时间,错了很多地方。AC代码:#include#include#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#原创 2013-03-15 01:20:49 · 620 阅读 · 0 评论 -
Dancing Links
Dancing links是一种能高效实现Knuth的X算法的技术,它可以使很多搜索问题得到极大的优化。假设x是一个双向链表中的一个节点,L[x]表示X的前驱,R[x]表示x的后继,则R[L[x]] = R[x], L[R[x]] = L[x]这一操作可以把x从链表中移除,这是众所周知的,当然,一个细致的程序员还会用 L[x] = R[x] = x或 L[x] = R[x]原创 2013-03-16 10:58:23 · 792 阅读 · 0 评论 -
二分寻找上下界
lower_bound(a,a+n,value);//小于等于value的第一个数的地址upper_bound(a,a+n,value);//大于value的第一个数的地址原创 2013-03-19 22:27:58 · 614 阅读 · 0 评论 -
树状数组
树状数组中用的d【】,每个点都有一定的管辖范围;如d[1]=a[1];d[2]=a[1]+a[2];d[3]=a[3];d[4]=a[1]+a[2]+a[3]+a[4];等等;这样的结构关键是为了,对一个数组内部动态的删除,增加,来高效的求某个点或者某个区间的值;比如说对数组a,改变某一位的值需O(1),求某个k区间值O(k);这样的原创 2013-02-26 11:16:21 · 392 阅读 · 0 评论 -
KMP算法
KMP算法值用线性的复杂度查找字串,比传统的带有回溯色彩的算法高效。下面是代码:int KMP(char *T,char *P){ int posT,posP,lenT,lenP;//定义两个指针,分别指向T和P,初始化从0开始 posT=0,posP=0,lenT=strlen(T),lenP=strlen(P); while(posT<lenT&&posP<l原创 2013-04-08 16:35:58 · 539 阅读 · 0 评论 -
hdu1892二维树状数组
树状数组一般的操作只有:1.单点更新,区间查询2.区间更新,单点查询其中区间更新和单点更新不能同时写在一起,会对树状数组的结构早成影响。这题:WA的情况主要是没有考虑到(x1,y1)可能大于(x2,y2);代码:#include#include#include#include#include#include#include#define maxn 2005#原创 2013-07-18 22:25:15 · 549 阅读 · 0 评论 -
poj2155树状数组 区间更新 单点查询
树状数组常规写法:1.单点更新(递增) 区间查询(递减)2.区间更新(递减)单点查询(递增)#include#include#include#include#include#include#define maxn 1005#define INF 0xfffffff#define min(a,b) a<b?a:b#define max(a,b) a>b?a:bint原创 2013-07-18 20:32:26 · 746 阅读 · 0 评论 -
Uva11019 AC自动机解决矩形模式串与文本串的匹配问题
这题题意就是给你一个矩形的文本串,一个矩形的模式串,问你文本串中出现模式串的次数。以前做过一维的情况,二维的话,就是增加一个count[][]数组,count[r][c]表示以(r,c)这个点为左上角的点,开始匹配,有多少行与模式串相同。如果相同的行数等于匹配矩形串的行数,则有加一。如果文本串(x*y)的r行,第c列与模式串(n*m)的第row行匹配成功,则count[r-row+1][c原创 2013-09-09 17:32:38 · 675 阅读 · 0 评论