数据结构
文章平均质量分 74
SeeYouAlways
practice make perfect
展开
-
POJ 2155 Matrix(典型的二维树状数组)
题意:进行两种操作,一种使得某一矩阵内的值取反,一种对某一点取值PS:采用向下更新,向上求和的方法先看下面的图:如果我们想把C矩阵内的值取反,那么如果对右上角进行更新,那么ABCD四个 区域全都取反,如果对左上角进行更新,那么AB区域取反,如果对左下角进行更新,那么B区域取反,如果对右下角进行更新,那么BD区域取反,我们可以看到,ABD都是偶数次改变,而C区域是单词改变达到取反目的。所以取原创 2013-07-11 21:53:26 · 578 阅读 · 0 评论 -
Hdu2647 Reward 拓补排序
题意:发奖金,地位相同的人发的奖金一样,地位高的多发一点,怎样使得所发出的钱最少又能满足要求思路:低的在前面,高的在后面,所以应用拓补排序,把相同层次入度为0的点都赋值为相同钱数,把这点存起来,然后把跟这些点有关系的点的入度减一代码:#include #include #include #include #include #include #include #incl原创 2013-09-13 10:20:04 · 507 阅读 · 0 评论 -
Hdu 1305 Immediate Decodability 字典树
题意:在多个字符串里寻找,若他们至少有一个串是另一个串的前缀,则按题目要求输出语气思路:建立字典树,因为只有0 1两数,数组开2大就行,判断是前缀的方法:每次插入一个字符串,在字典树中查询,若当到达已经存在了的字符串,即cur->cnt==1 ,也就是插入字符串的前缀,或者在字典树中能够找到插入的字符串代码:#include #include #include #include原创 2013-09-06 11:21:21 · 750 阅读 · 0 评论 -
Hdu 1671 Phone List 字典树
题意:若存在一个串是另一个串的前缀,则输出NO 否则输出YES;思路:和hdu 1305一样,只是数据量大,改用了静态存储这题我弄了好久,之前用动态存储,改用静态有点不熟,写完之后发现一直错,后面发现还是可恶的初始化问题两种代码:第一种:和hdu 1305想法一样#include #include #include #include #include #include原创 2013-09-06 16:28:16 · 613 阅读 · 0 评论 -
Hdu 4287 Intelligent IME 字典树 Hash
题意:给出n个字符串(数字代表),在给出m个单词,每个单词都有其对应的数字,问对于n中的每一个字符串,求出其在m字符串中出现的次数第一种方法:比较简单的字典树,对m个字符串建树,然后查询第二种方法:因为字符串长度不超过6,所以直接使用hash字典树代码:#include #include #include #include #include #include #incl原创 2013-09-05 22:27:51 · 756 阅读 · 0 评论 -
Hdu 1828 Picture 线段树+矩形周长并
题意:求n个矩形相交的周长和思路:跟矩形面积并差不多,只是多了一些标记变量shunum[num]用来标记这个区间被多少条线段覆盖(相当于此时有几根竖线,因为总区间被 shunum 条线段覆盖,那么必定有2*shunum的端点,这些端点其实就是连着竖线的)len[num]区间被覆盖的长度cnt[num]这个区间被覆盖了几次ld,rd,是一个标记量,只有0,1,表示这个节点左右两个原创 2013-08-29 14:40:17 · 448 阅读 · 0 评论 -
Hdu 4424 Conquer a New Region 并查集
题意:给出一棵树,树中每条边有一权值,对于从节点i 到节点 j 的路径,他的权值为该路径上最小的边的权值,问确定一个中心节点,使得该中心点到其他点的权值之和最大思路:由于权值只和路径上边的最小值有关,所以我们把边的权值从大到小排序,每次并查集合并时取最大值即可代码:#include #include #include #include #include #include #原创 2013-08-16 21:17:27 · 611 阅读 · 0 评论 -
Hdu 1255 覆盖的面积 线段树+矩形面积并
继续面积并学习中。。。(线段树解决)题意:给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积思路:其实跟求矩形面积并的思想是一样的,只不过在update里做了一点修改,矩形面积并只需要求至少覆盖一次的面积,而这题是至少覆盖两次的面积,稍微做点修改就可以了一样的,要求面积,就要求出至少覆盖两次的有效长度乘以高度差即可,求有效长度:1.cnt>1 : 说明该区间被覆盖两次或以原创 2013-08-27 13:40:50 · 1105 阅读 · 0 评论 -
Hdu 1542/ POj 1151 Atlantis 线段树+矩形面积并
题意:给出n个矩形,求它们的面积并思路:采用扫面线的思想,把矩形分成两条边,上边和下边,对横轴建树,然后从下到上扫描上去, cnt 这个变量表示了该节点表示的区间被完全覆盖,如果cnt=0,说明没有被完全覆盖(但不代表没有被覆盖),sum代表该区间内被覆盖的线段的长度总和,要算出该节点所代表的区间被覆盖的长度,需要由它左右孩子节点被覆盖的长度相加所得。如果cnt=1,表示被完全覆盖,覆盖长度就原创 2013-08-27 13:28:26 · 582 阅读 · 0 评论 -
Hdu 2795 Billboard
题意:给一个h*w的公告牌,h是高度,w是宽度,一个单位高度1为一行,然后会有一些公告贴上去,公告是1*wi大小的长纸条,优先贴在最上面并且最左边的位置,如果没有空间贴得下,就输出-1,可以的话,就输出所贴的位置(第几行)思路:每次贴一张,去找一个空间>=w的最左上边的位置,所以优先进入左孩子,每次都要把孩子所剩空间的最大值更新至父节点代码:#include #include #i原创 2013-08-23 21:05:46 · 459 阅读 · 0 评论 -
Hdu 3183 A Magic Lamp
题意:给你一个小于1000位的数和m,问从中删除m个数使得结果最小RMQ算法。。。思路:在n位数里删除m个,相当于找出n-m个位组成最小数我们采用返回下标的方法,所以要把原来的 所以在区间 [0, m]里面找最小的数,对应的下标标号i接着找区间 [i+1,m++]里面的最小数,对于下标为ii接着找区间 [ii+1,m++]里面的最小数……这样就会找n-m个数了。区间这样原创 2013-08-23 14:18:24 · 631 阅读 · 2 评论 -
Hdu 3139 Find the hotel
题意:给p、 d分别代表每个旅馆的价钱和需要走的距离,问能最多选几个旅馆但需要满足以下条件被选中的旅馆 i 的情况下,不能存在一个旅馆其价钱和距离都比i 的小思路:我们可以把每种价钱的最短距离保存起来,之后处理时拿到某一个旅馆,就判断前面是否存在价钱和距离都比它小的情况,如果满足就放弃它,否则取它(前提:已经排好序的,先按价钱从小到大排,如果价钱相等,就按距离从小到大排)因为那个距离和原创 2013-08-23 17:08:40 · 542 阅读 · 0 评论 -
多校第四场 Hdu 4638 树状数组
题意:一段区间里怎样分组才能是的value最大,组内人员编号必须是连续的,刚一看这个题目我就确定是用树状数组做,但是怎么想也想不到树状数组怎么分组。。无语了。我用笔推了一下,要是各组value值最大,必须尽量每一组的人数足够大,组数尽量小,如4个人,value=4*4,这时值最大,两组时3、1,value=3^2+1^1也比2^2+2^2大............因此,可以得出结论,使组内的人尽量原创 2013-08-01 22:42:52 · 466 阅读 · 0 评论 -
Poj 2528 线段树+离散化
题意:那里准备要竞选长,每个候选人都可以在一面墙上贴自己的海报,可以连续的贴一块区域,后来贴上的可以覆盖原来的,问最后可以看见多少张海报(只要不完全覆盖算一张)思路:用到线段树,但是因为WAll=10^7,所以建那么大的树肯定会TLE,所以要进行离散化在构造线段树的节点结构体时,添加变量clor。clor=0时表示c线段没有贴海报,或者贴了不止一张海报;clor>0时表示贴了一张海报,并且原创 2013-07-26 16:32:47 · 498 阅读 · 0 评论 -
树的直径与树的中心
1. 树的直径概念:树中的最长路。求法:两次深搜或DP。1-两次深搜:任找一点A为源点,深搜遍历得到最远点B,这个最远点B必定在直径中(感性想想,以A点为源点找到的最长路后面一段必定属于树的直径的一部分);再以这个最远点B为源点深搜遍历求一个最长路,这个最长路即为树的直径。2-DP:显然最长路的两个端点必然是叶子或者根节点。设f(i)表示到i最远的叶子,g(i)表示到i次远的叶子,转载 2013-08-02 22:16:39 · 1527 阅读 · 0 评论 -
POj 2182 线段树
题意:题意:FJ有n头牛,编号为1~n,它们并没有按照编号的顺序排好队。现在,FJ只知道每一个牛前面有多少只牛的编号比它大。问你能不能判断出所有牛的编号。思路:采用线段树。。假设一个编号高度为a[i],那么它的编号肯定是a[i]+1,所以我们倒着想,先求出最后一只牛的编号,然后去掉,这时剩下n-1只牛,又可以从n-1里找高度为a[i-1]的牛,所以有a[i]+1=nk-k,k代表被去掉的牛数,原创 2013-07-26 16:10:54 · 546 阅读 · 0 评论 -
Hdu 3874 Necklace 树状数组
题意:询问某一区间的值之和,相同元素只算一次思路,树状数组求解,由于区间相同元素只算一次,采用离线算法,把区间右端点从小到大排序,按顺序处理。首先我们找到一个点时,记录它的下标,若在后面还有与它相同的元素,我们把之前的元素去掉,插入到当前位置,每次进行这样的一次处理,就要判断一下,处理后该点有没有等于某一询问区间的右端点,有的话直接求,因为前面已经都处理过来了,所以该点前不存在重复的点原创 2013-07-30 09:52:34 · 467 阅读 · 0 评论 -
POJ 1182
//我一直还不太懂这题怎么解,为了方便,我暂时转下来待以后专。。。建议:做此题之前先做 poj 2524 和 poj 1611。这两道题都是并查集的基础应用。关键词:并查集 相对关系思路:(用一个并查集就够了,同时对每个节点保持其到根结点的相对类别偏移量)1.father[x]表示x的根结点。rank[x]表示father[x]与x的关系。rank[x] == 0 表示fa转载 2013-02-14 09:27:44 · 275 阅读 · 0 评论 -
BNU A Simple Tree Problem 线段树
A Simple Tree ProblemGiven a rooted tree, each node has a boolean (0 or 1) labeled on it. Initially, all the labels are 0.We define this kind of operation: given a subtree, negate all its labels.原创 2013-10-23 20:02:00 · 525 阅读 · 0 评论