![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM-数据结构
weixin_39399748
这个作者很懒,什么都没留下…
展开
-
Codeforces 979D Kuro and GCD and XOR and SUM 字典树+位运算+思维
第二次做到这种带异或的题要建字典树的,第一次不会,第二次又没想出来,这笔帐先记下了。。。异或这个东西就是,题目让你求的东西,往往跟它每一位密切相关,跟别的关系不大,所以它才总被用来建字典树。。。这个题的第二种操作,有三个条件,一个是整除的条件,对于这个条件,我们用数学的东西一想,就晓得如果不马上需要输出-1的话,那一定是要查一个能整除k的点。但整除跟异或关系又不大,这咋整呢?然后神奇操作就来了...原创 2018-07-23 10:54:10 · 142 阅读 · 0 评论 -
HDU 1156 Brownie Points II 思维+线段树+离散化
这个题的线段树倒还没有特别难,只是想到如何去用这个线段树比较麻烦。这里我们动态地想象这整个过程,当竖线在最左边时,对于某个横线,大于线的纵坐标,就是第一象限,就是st的得分;小于这个纵坐标,就是第四象限,就是ol的得分。我们把每个点的这两个值都用线段树记下来。然后,处理这个竖线上的点。当我们把竖线朝右移的时候,一个原竖线上的点,对于高于它的点,将变成第三象限的点,我们更新记录高于它的点的st的得分...原创 2018-07-23 00:11:03 · 222 阅读 · 0 评论 -
HDU 1829 A Bug's Life 带权并查集
之前也写过两次带权并查集,但是并没有理解新开那个记录权值的数组的意义,不知怎么当时都歪打正着把题给(凭人品)做出来了。今天又按照以前错误的想法去做带权并查集,果不其然一下子就做错了。于是虚心学习,了解到新开的那个数组是用来记录当前节点和祖先结点的关系的。于是更新了一下合并和路径压缩用的公式,把题交上了。#include<iostream>#include<cstdio&g...原创 2018-07-22 21:27:54 · 155 阅读 · 0 评论 -
HDU 2473Junk-Mail Filter 并查集
一开始我犯的错误是这样的:删除节点的父亲设成一个没用过的新节点。这种做法非常之错误,因为一旦进行路径压缩,煞费苦心申请的新节点就全完了。我们一想,为啥删除并查集里的节点这么难呢?都是因为有很多祖先节点呀!所以我们一开始就不把祖先结点设成实实在在的结点,这样就干啥都方便了。#include<iostream>#include<cstdio>#include<s...原创 2018-07-22 21:22:58 · 169 阅读 · 0 评论 -
HDU 3038 How Many Answers Are Wrong 带权并查集
最近一连做了好几道就着区间建图的图论题,发现建图的时候都很喜欢把区间看成两个前缀和之差,我小叮当长见识了。这道题也是这样。一开始的时候想让r数组表示当前点到其祖先这个区间(包含两端点),后来要路径压缩了,发现情况不大对头。。。前缀和大法好!果然应该记录当前点与祖先的前缀和之差!#include<iostream>#include<cstdio>#include&l...原创 2018-07-22 21:01:44 · 72 阅读 · 0 评论 -
HDU 3047 Zjnu Stadium 带权并查集
众所周知,我们做这种种类并查集,喜欢开一个数组,用向量的思想去记录和计算当前点和它祖先的关系。这个题也一样,按部就班把式子写上就行了,建图也很容易想。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;i...原创 2018-07-22 20:50:36 · 128 阅读 · 0 评论 -
HDU 1598 find the most comfortable road 并查集+贪心
对边做一个排序,然后对于每一个询问,每次都去枚举权值最小的边,再做最小生成树,一旦询问中的点联通了,我们就可以认为在当前最小边权值的情况下,舒适度最大的情况已经达到了。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cm...原创 2018-07-29 16:54:49 · 119 阅读 · 0 评论 -
Codeforces 980E The Number Games 树上倍增
2的指数,前n-1个数的和不如第n个数大。所以我们要把n-k个最大的数保留下来。做法就是贪心排个序,每次找一下还能路径上经过的点数不超过还能放在集合里点数的最大的点。咋找路径呀,那就用树上倍增。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#...原创 2018-07-29 16:48:46 · 145 阅读 · 0 评论 -
HDU 1247 Hat’s Words 字典树
题目没告诉字符串的长度,一开始开了个vector,一边再字典树上找单词,一边记录可能是两个单词拼接处的位置,结果竟然爆了空间,想不明白,明明每次都把vector清空了呀,倘若空间爆了炸,时间更应该爆炸才对,结果最后发现人家都枚举的字符串拼接的位置,然后我就去学了他们的榜样,可还是wa的。最后让我弄明白了,原来是要再输入的时候要写while (gets(ss[cnt]),strcmp(ss[cnt]...原创 2018-07-25 21:22:10 · 92 阅读 · 0 评论 -
HDU 1255 覆盖的面积 扫描线+线段树
在这道题之前做过一次扫描线,这次首先就往扫描线上想了。最开始的想法非常傻,就是记录当前坐标长度范围内被覆盖的层数,以及最近一次被覆盖层数由1变成2的位置。每次覆盖的层数要减一了,就去查询,更新什么的。啊呀,太傻了!写着写着就写不下去了,本想把这一发代码贴出来教大家看了笑一笑,结果又弄丢了。其实我们应该这样,对于每一个线段树上的区间,我们去记录他的纵坐标范围,平行线的序号范围,覆盖两次以上的长度...原创 2018-07-25 21:17:51 · 148 阅读 · 0 评论 -
HDU 1264 Counting Squares 线段树+扫描线
第四次写线段树,把之前那道覆盖一次以上面积的题改了改拿过来。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>using namespace std;struct Node{ int l,r; int c; int ...原创 2018-07-28 21:27:32 · 124 阅读 · 0 评论 -
HDU 1811 Rank of Tetris 并查集+拓扑排序
我这号菜鸡,上来又用一个蠢萌的算法WA掉了这道题,就是把相同级别的点,也按照编号的大小做一个拓扑排序。其实这用手指头肚想想都不可能对,一定会把原本conflict的情况算成ok的。所以转而使用正常人会用的方法,使用并查集把相等级别的点合成一个点,这样很好。#include<iostream>#include<cstdio>#include<string.h&...原创 2018-07-19 23:39:13 · 128 阅读 · 0 评论 -
CodeForces 1009F Dominant Indices 树上dsu
老厉害了,借这道题学习一下树上启发式合并。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<vector>#include<map>using namespace std;int n,sz[100...原创 2018-07-19 23:30:11 · 281 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number 线段树+思维
去年用树状数组做过这道题,今年思路一样,多亏这是个n的全排列,每动一个数,你知道会有多少数发生改变。第五次手写线段树,写过了高兴。#include<iostream>#include<cstdio>#include<string.h>#include<algorithm>#include<cmath>#include<...原创 2018-07-30 21:23:16 · 146 阅读 · 0 评论