数据结构
文章平均质量分 86
Dan__ge
Today is difficult,tomorrow is more difficult,but the day after is beautiful.
展开
-
HDU 2222 AC自动机模版题
点击打开链接题意:问前面给的所有串在最后一个串出现的次数思路:这道题是AC自动机入门必做的题,所以没什么好说的,是个模版题,推荐一个大神写的算法详解,不懂得可以看一看,反正我是看他的稍稍懂了点#include #include #include #include #include using namespace std;typedef long long ll;const原创 2016-03-29 16:49:30 · 840 阅读 · 0 评论 -
HDU 2896 AC自动机模版题
点击打开链接题意:给了病毒编号,又给了网站,问哪些网站中了病毒,并将中的病毒编号输出,最后输出共有多少网站中病毒思路:AC自动机模版题,将结构体里的num记为病毒编号就行了,我的代码如果将N设为128就会超内存,但是可见的ASCII只有32到127,不用计算空格,94就可以了#include #include #include #include #include using na原创 2016-03-29 20:08:05 · 676 阅读 · 0 评论 -
HDU 3065 AC自动机模版题
点击打开链接题意:中文题不解释了思路:用AC自动机,套模版而已,注意记录就行,纯套模版,真心没什么好说的#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=5000010;c原创 2016-03-29 20:38:10 · 668 阅读 · 0 评论 -
二叉查找树模版
仅仅是自己整理的一份模版,怕时间久了会忘掉,主程序里面是自己做的一些测试,能够完成输出查找插入和删除四种功能,接下来会在这个程序上完成平衡树Treap的部分功能#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;c原创 2016-03-17 18:45:14 · 1454 阅读 · 0 评论 -
HDU 4585 平衡树Treap
点击打开链接题意:给出n组数,第一个数是id,第二个数是级别,每输入一个,输出这个人和哪个人打架,这个人会找和他级别最相近的人打,如果有两个人级别和他相差的一样多,他就会选择级别比他小的打架。思路:用treap完成,可以用STL水过,但要练Treap就写了平衡树的,对于每个人的等级,我们找到他的等级的排名t,然后找第t-1大的数和第t+1大的数,然后进行比较一下。讨论后输出,PS:没有好得原创 2016-03-18 17:07:38 · 1850 阅读 · 0 评论 -
ZOJ 3228 AC自动机
点击打开链接题意:给定模式串,问下面的串最多出现多少次,0代表可以重叠,1代表不能重叠思路:正常的0可以用模版直接实现,1的可以再写一个查询的,不能重叠,尽量先取前面,结果是最优的,所以我就记录这个串上一次出现的位置,然后在走了串这么长的长度才可以在+1.#include #include #include struct node{ node *fail; node原创 2016-03-31 21:01:00 · 722 阅读 · 0 评论 -
HDU 5444 二叉搜索树模版的不能在模了
点击打开链接题意:依次输入n个数,比第一个节点小就放在左边,比较第一个节点的左儿子的值,如果还小,就在放到左边,就是二叉搜索树的思想思路:数都是二叉搜索树那么存的,那找的时候肯定也是在树上面找了,模版题,不多解释#include #include #include #include #include using namespace std;typedef long long l原创 2016-04-02 12:35:50 · 755 阅读 · 0 评论 -
HDU 3336 数据结构之KMP
点击打开链接题意:t组数据,每组开头一个n,然后一个长度为n的字符串,问以第一个为串的数量到以整个串为串的数量的和,最后对10007取余思路:用KMP的next数组保存就行了next数组存的是与开头进行匹配的可以匹配到的位置,如abab,则next数组为0 0 1 2,第三个的1表示从头匹配的匹配到的位置,第四个数就是4了,然后从头到尾扫一遍,直到next数组为0为止,每一次加1#incl原创 2016-03-21 18:28:55 · 759 阅读 · 0 评论 -
HDU 3746 数据结构之KMP
点击打开链接题意:给T组数据,每组一个字符串,问最少添加多少个字符可以使这个串变成一个子串连续出现的串思路:利用KMP的next数组进行变换,next数组保存的是目前为止与字符串从头开始的匹配的程度,也可以看成从头开始的位置,所以如果Next数组最后一个为0,则需要在添加一个这样的串才能匹配成功,不然ans=len-Next[len]代表的是不能匹配的后面的串的长度,如果这个长度可以被le原创 2016-03-22 12:41:36 · 908 阅读 · 0 评论 -
HDU 5137 数据结构之最短路
点击打开链接题意:给出一系列的关系图,每两个人求对方办事会花费多少钱,1要将儿子送到n那去读书,利用这些关系来完成,但是你和1有矛盾想让他完成不了,你有一个权利让其中一个人不做这些事,除了1和n之外的其他人都会答应你,如果1不能完成则输出Inf,不然输出,他要花费的最大价值思路:用最短路完成,遍历2~n-1这些点,将他们标记后就不能在使用,然后求最短路,如果走不到n,则输出Inf,不然我们原创 2016-03-22 16:03:34 · 886 阅读 · 0 评论 -
HDU 4081 次小生成树变形记
点击打开链接题意:n个点用n-1条边连起来,问两个点的人口A除以总的距离减去这两点的距离的最大值,表达能力有限,看看别人怎么翻译的吧,但是代码还是不错的......思路:用到的是次小生成树中的记录i->j的最大距离,然后枚举每条边,因为已经求出了最小生成树,所以如果你加入这条边后,肯定会形成一个环(画图会有奇效),然后我们减去这个环的最大值,就可以保证B最小,遍历所有边后,输出最大值,而且原创 2016-03-22 19:56:32 · 1114 阅读 · 0 评论 -
HDU 4763 数据结构之KMP+二分
点击打开链接题意:求最长的开头与结尾,然后中间还有一样的,但是不能重复利用一个字符思路:用KMP的next数组,然后用二分求最大值,具体看二分就行了#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;con原创 2016-03-22 20:45:47 · 719 阅读 · 0 评论 -
HDU 4288线段树开动脑筋
点击打开链接题意:有几种操作,add加入一个数,del删除一个数,问所有下标%5==3的数的和思路:看题就知道是线段树,又有加入又有删除又有求和的,线段树无疑,可是问的是下标%5==3的数的和,我们可以令开一个数组cnt,记录区间数字的个数,这样我们开一个num数组,二维的,后面的[5]分别记录区间的下标%5==0,1,2,3,4的数的和,在更新的时候,如果要求num[][3]的值,则左儿原创 2016-04-06 14:00:49 · 761 阅读 · 0 评论 -
扩展KMP的模版
记录模版,以后好好学习#include #include #include #include #include using namespace std;const int maxn=100005;int next[maxn],extand[maxn];char S[maxn],T[maxn];void GetNext(const char *T){ int len=原创 2016-03-24 11:00:20 · 645 阅读 · 0 评论 -
ZOJ 3587 扩展KMP应用
点击打开链接题意:给定两个串,问从第一个串取出连续的两段,合并后可以拼成第二个的方法总数,这两段可以有重叠的部分思路:用扩展KMP求出extand数组,不懂KMP的可以看这篇点击打开链接,解释的很详细,extand[i](0=1,第一个字符的可能性就+1;第二个也一样,只要extand[i]>=2就+1;后面的情况我们可以将字符串反过来扩展KMP一次,求得结果与前面的意义相同,看代码吧,对原创 2016-03-24 18:25:29 · 915 阅读 · 0 评论 -
hdu 1542 线段树之扫描线之面积并
点击打开链接题意:给你n个矩形,求它们的面积,重复的不重复计算思路:用线段树的扫描线完成,将X坐标离散化后,从下到上扫描矩形,进行各种处理,看代码注释把#include #include #include #include #include using namespace std;typedef long long ll;const int maxn=1e3+10;#def原创 2016-03-24 20:44:14 · 1834 阅读 · 0 评论 -
HDU 1828 线段树之扫描线之周长并
点击打开链接题意:给n个矩形,求它们重叠后的周长思路:用线段树的扫描线从下到上扫一遍,与面积并思想有些相似面积并,下面重边的处理相似,但是周长的并需要求的是竖边的个数然后乘以高度,而面积并求的是底边的长乘以高度,这里我们用了区间合并时的lnum和rnum,具体下面有注释#include #include #include #include #include using names原创 2016-03-25 11:41:49 · 1157 阅读 · 0 评论 -
POJ 3974 Manacher模版题
点击打开链接题意:求最长回文子串思路:Manacher算法的强大这里不解释了,推荐一篇很好的Manacher详解点这里#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=100原创 2016-04-12 12:35:06 · 696 阅读 · 0 评论 -
HDU 4513 Manacher小小变形
点击打开链接题意:中文题目思路:求的东西也是一个最长回文子串,不过多了一个最左侧到中间递增,只要改一下Manacher模版找中间时候的条件就可以水过了,下面还有解释#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3原创 2016-04-12 13:15:09 · 1071 阅读 · 0 评论 -
HDU 3294 Manacher模版题
点击打开链接题意:求最长回文子串所在的区间,然后第一个字符代表a,以后的顺推,最后输出这个区间顺推后的串思路:Manacher轻松水过,记录下最长回文串的位置和长度就行了,然后输出时自己处理一下,大水题.......#include #include #include #include #include using namespace std;typedef long long原创 2016-04-12 14:45:28 · 738 阅读 · 0 评论 -
HDU 3068 Manacher 模版题
点击打开链接题意:求最长回文子串思路:Manacher 算法水过,推荐这位大牛的证明证明#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=110010;char str[m原创 2016-03-26 16:52:25 · 541 阅读 · 0 评论 -
平衡树Treap模版
自己总结的一个平衡树Treap模版,自己测试了一下,感觉没什么错误,但总感觉有bug,请大家指教一下,下面是自己测试时写的测试用的代码,请无视#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int原创 2016-03-17 19:28:49 · 1267 阅读 · 0 评论 -
BZOJ 1588 Treap模版题
点击打开链接题意:中文题,但是注意输入有点问题,可以看看讨论,大神们的测试出来的思路:我的是用Treap找到当前值的排名k,然后找k+1和k-1的值与当前值的绝对值之差的最小值,加起来最后输出即可#include #include #include #include #include using namespace std;typedef long long ll;const原创 2016-04-12 20:27:02 · 1014 阅读 · 0 评论 -
HDU 4411最小费用流
点击打开链接题意:从0出发,1~N每个城镇有个小偷,我们要把他们全部抓到,我们可以派出k个警察,但是再抓i城镇的小偷之前,i城镇之前的所有城镇的小偷已经被抓了思路:哪有什么思路,看了网上的题解,为了将所有的点都跑到,我们将每个点拆成两个点,之间连一条容量为1,费用为-1000000的边,为什么这么连,这是为了保证每个点的跑到的条件,因为最小费用流的增广路径是通过最短路来完成的,这样我的点拆原创 2016-04-13 17:31:21 · 670 阅读 · 0 评论 -
HDU 3308 线段树之区间合并
点击打开链接题意:T组数据,每组n和m,代表n个数和m次操作,U代表将第a个数的值改为b,Q代表询问a~b区间的最长连续上升子序列的长度,严格上升的思路:一看到询问多少次了这种,肯定是线段树不用想,问区间的最长上升,可以用区间合并,lnum代表从区间左第一个元素开始的最长上升长度,注意第一个元素必须有,rnum代表从区间必须有最后一个元素的最长上升子序列,,mmnum代表区间最长的上升子序原创 2016-04-09 15:02:25 · 1971 阅读 · 0 评论 -
HDU 4685 强联通分量+网络流
点击打开链接题意:与POJ 1904 极其相像的一道题目,POJ的将一个完备匹配图给了你,并给了你一组可能的情况,很简单,但是这道题目,给的既不是完备匹配也没有给出可行的匹配方案,难的不要不要的思路:刚开始看以为是和1904一模一样呢,然而难度上升的真快,看了一下是13年的多校题目,过了10几个把,可想而知这难度不是我等能够A掉的,刚自己想的是只加王子使其变成完备匹配,然后WA了,对了说一原创 2016-05-24 19:27:48 · 4476 阅读 · 3 评论 -
HDU 4747 线段树+思维
点击打开链接题意:给出一个数字序列,定义mex为一段序列中没有出现的最小的自然数,问所有的mex的和思路:网络赛题目,为何感觉如此的难,对于200000的数列并且有多次的区间和,想是想到要用线段树处理了,但是根本没有接下来的思路了,借鉴神犇的思路神犇的思路来写把,真是不知道人家怎么想的那么一步到位,慢慢学习把~~~,我们首先预处理出来对于第一个数的mex[i],1<=i<=n;然后再将每一原创 2016-04-30 15:45:11 · 3451 阅读 · 0 评论 -
BZOJ 1208 平衡树Treap模版题
点击打开链接题意:不描述了思路:我们只需要一个树就可以,输入一个数就存进去,当人和动物都大于0的时候,开始给人分配宠物,人的期望值b的排名k,找到k-1的数和k+1的数,比较哪个离b更近,人多还是动物动情况一样不用分开讨论,然后加起来取余输出,简单题#include #include #include #include #include using namespace std;原创 2016-04-30 18:10:16 · 3861 阅读 · 0 评论 -
HDU 5452 LCA
点击打开链接题意:给一个树和树上的分支组成的图,问我当且仅当删除一条树上的边,最少再删除几条边使得图不连通思路:我写了两个做法,第一种是不加优化的十分暴力的LCA,也就是裸的,因为这道题目的数据说很水,这样的复杂度也可以,O(n*m),n为20000,m为200000,明明是超时好不好,这个做法也简单易懂,在这个树上,我们加了一条边u->v,那么u与v的最近公共祖先为fa,那么u->f原创 2016-05-25 17:42:46 · 3351 阅读 · 0 评论 -
HDU 2594 数据结构之KMP
点击打开链接题意:输入两个串,求第一个串的头和第二个串的尾匹配的最长长度思路:用KMP的next数组,将两个串合并之后求Next数组,合并后的长度为len,Next[len]代表的就是第二个串和第一个串的匹配程度,讨论后输出#include #include #include #include #include using namespace std;typedef long原创 2016-03-22 13:06:54 · 837 阅读 · 1 评论 -
HDU 4318 图论之最短路变形
点击打开链接题意:看样例说把,一共4个点,接下来输入一个数,代表当前点连接的点的数量,然后那几个点,样例里面就是1->2消耗50%的能量,1->3消耗70%的能量,2->1消耗30%的能量,2->4消耗20%的能量,一次类推,最后一行输入起始位置,重点位置,开始时的能量,问从起点走到终点,消耗的能量最少。思路:很明显的最短路变形,我们可以将求出从起点到终点剩余的最多的能量,用总能量减去它,原创 2016-03-20 11:19:14 · 1468 阅读 · 0 评论 -
HDU 4333 扩展KMP
点击打开链接题意:一个数字,依次将第一位放到最后一位,问小于本身的数的个数及等于本身的个数和大于本身的个数,但是要注意重复的不再计算思路:用扩展KMP我们可以处理,先将串复制到后面一次,然后求扩展KMP,那么我们如何比较呢,如果extand[i]的值大于串的长度len,说明我以i为开头的串和原串的匹配大于len,也就说明这个串和原串相等,接下来就是另外两种情况,若extand[i]匹配到了原创 2016-05-12 20:44:32 · 4287 阅读 · 0 评论 -
POJ 3264 RMQ—ST
点击打开链接题意:给出n个数的数列,m次询问,每次询问输出a~b的最大值与最小值之差思路:用RMQ预处理,查询为O(1)的复杂度,很好的模版练习......,看的这篇博客学习的这一篇#include #include #include #include #include using namespace std;typedef long long ll;const int in原创 2016-05-02 15:25:18 · 3297 阅读 · 0 评论 -
ZOJ 3195 LCA转RMQ
点击打开链接题意:输入n,接下来n-1行,每行a,b,c代表a与b有一条权值为c的边,双向边,m次询问,问最短的距离使a,b,c可以联通思路:LCA的模版题,没什么好说的,看理论的话网上好多本弱就不说了,代码有注释,有助于理解#include #include #include #include #include #include using namespace std;ty原创 2016-05-02 19:37:03 · 4021 阅读 · 0 评论 -
HDU 2586 LCA转RMQ
点击打开链接题意:就是问两个节点间的距离思路:又切了一道模版水题,不解释了,看不懂变量含义的可以看我写的这篇,解释的比较详细ZOJ 3195#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3原创 2016-05-02 20:00:25 · 4153 阅读 · 0 评论 -
HDU 2874 LCA转RMQ+并查集
点击打开链接题意:问两个城市是否相连,不相连输出Not connected,否则输出两个城市间的最短距离思路:用并查集判断两个城市的连通性,如果联通则做法和LCA一样,但是注意的一点是地图不连通的话,我们要将所有点都建起来,就要加一个模拟的点,将所有图串起来,很好处理的,看一下就会了#include #include #include #include #include #inc原创 2016-05-02 20:25:59 · 3954 阅读 · 0 评论 -
HDU 3613 Manacher应用
点击打开链接题意:上面的数字是26个字母的价值,接下来26个英文字母组成的字符串,将它分成两份,如果分后的串是回文串,则这个串的价值是这个串的所有字母的和,如果不是回文串则这个串价值为0思路:简单的回文串的变形,先将到每个位置的价值预处理出来然后将字符串跑一边马拉车,我枚举切每个位置的价值和,如现在枚举的是切第三个的位置,则判断一下前三个位置能否形成回文串,那么我们只用判断第二个位置的le原创 2016-04-19 11:15:49 · 2020 阅读 · 0 评论 -
HDU 5371 Manacher
点击打开链接题意:给定一串数字,求最长的一段连续的数字,将它平均分为三段,满足第一段和第二段是回文的,第一段和第三段相等思路:第一段和第二段是回文的,那么第二段和第三段也是回文的,将数列进行Manacher,之后处理len1数组即可,做法是枚举第二段的开头和长度,当然要有限制条件,不然感觉要超时,记录最大的每段长度为ans,那么只有当len1[i]/2的值大于ans时才继续执行,然后通过第原创 2016-04-19 14:29:16 · 814 阅读 · 0 评论 -
HDU 3172 并查集+trie树
点击打开链接题意:给n个关系,然后问u与v的集合中元素的个数思路:就是简单的并查集就行了,只是这个给的字符串比较猥琐,我们用trie树查找就行了,操作还是很简单的,然后注意的是出题人竟然设置了多组,还要多组输入,只能感叹,WA了两次,org~~~#include #include #include #include #include using namespace std;ty原创 2016-05-27 13:18:09 · 773 阅读 · 0 评论 -
HDU 2473 并查集
点击打开链接题意:给了两种操作,M u v将u与v连接到一起,S u 将u从它的集合中拿出来,但是不改变集合中的其他元素已有的关系思路:就是直接并查集,然后有了个删点的操作,这与之前写的ZOJ 3789的删除操作是一样的,找个数组代替就可以了,简单~~~ PS:加了路径压缩跑得还是那么慢,org#include #include #include #include #includ原创 2016-05-27 13:57:04 · 683 阅读 · 0 评论