自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Dan__ge的博客

Today is difficult,tomorrow is more difficult,but the day after is beautiful.

  • 博客(46)
  • 收藏
  • 关注

原创 ZOJ 3228 AC自动机

点击打开链接题意:给定模式串,问下面的串最多出现多少次,0代表可以重叠,1代表不能重叠思路:正常的0可以用模版直接实现,1的可以再写一个查询的,不能重叠,尽量先取前面,结果是最优的,所以我就记录这个串上一次出现的位置,然后在走了串这么长的长度才可以在+1.#include #include #include struct node{ node *fail; node

2016-03-31 21:01:00 705

原创 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 661

原创 HDU 2896 AC自动机模版题

点击打开链接题意:给了病毒编号,又给了网站,问哪些网站中了病毒,并将中的病毒编号输出,最后输出共有多少网站中病毒思路:AC自动机模版题,将结构体里的num记为病毒编号就行了,我的代码如果将N设为128就会超内存,但是可见的ASCII只有32到127,不用计算空格,94就可以了#include #include #include #include #include using na

2016-03-29 20:08:05 662

原创 HDU 4786 图论之最短路

点击打开链接题意:问有没有一个生成树的权值之和是斐波那契中的值思路:分别求一次最大生成树权值和为max1和最小生成树权值和min1,如果不能生成一个树,直接输出No,不然判断min1到max1中有没有斐波那契数就行了,至于为什么可以,我感觉我队友说的比较有道理,最小生成树可以加一条边然后删一条边生成次小生成树,依次类推,我们可以用次小生成树在生成一个次小次小生成树,一直可以推到最大生成树,

2016-03-29 19:52:41 587

原创 HDU 2222 AC自动机模版题

点击打开链接题意:问前面给的所有串在最后一个串出现的次数思路:这道题是AC自动机入门必做的题,所以没什么好说的,是个模版题,推荐一个大神写的算法详解,不懂得可以看一看,反正我是看他的稍稍懂了点#include #include #include #include #include using namespace std;typedef long long ll;const

2016-03-29 16:49:30 828

原创 UVA 11090 图论加二分

点击打开链接题意:给n条边和权值,求能形成的环中,权值和除以点的个数的值的最小值思路:其实做的时候一点思路也没有,在网上看了别人的题解,还是很简单的,思维还是没锻炼到啊....,就是用二分判断mid,将所有的边权减去mid,如果这时候有负环的话,则说明这个mid是可以满足的,比如说没减去mid时,有一个k个点形成的环的权值和为k*mid-1;那么这个环是满足的,但是我们没有办法求这个k个点

2016-03-28 20:24:46 735

原创 AOJ 2249 图论之最短路

点击打开链接题意:给了一些边,现在要你删除其中一些边,使1到其他位置的最短距离不变,但是费用要最小思路:用dijkstra求最短路,在更新路程距离时将费用更新即可,代码中有注释#include #include #include #include #include #include #include using namespace std;typedef long long

2016-03-28 18:24:00 1052

原创 HDU 5652 图论之并查集

点击打开链接题意:上边是中国,下边是印度,黑点的部分不可以走,下面的矩阵1代表黑点不能走,然后给了Q,每一次将一个点变成黑点,即不能走,问最少多少次就可以完成思路:如果有一条黑点连成的线,从走到右的说明我们达成了目的,那就好办了,每一个黑点可以与周围的8个黑点相连,这样我们在最左边建个汇点最右边建个源点,每次询问这两个点在不在一个集合就行了,用并查集轻松实现,只要两个点相连就放到一个集合里

2016-03-27 16:38:41 785

原创 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 530

原创 HDU 1828 线段树之扫描线之周长并

点击打开链接题意:给n个矩形,求它们重叠后的周长思路:用线段树的扫描线从下到上扫一遍,与面积并思想有些相似面积并,下面重边的处理相似,但是周长的并需要求的是竖边的个数然后乘以高度,而面积并求的是底边的长乘以高度,这里我们用了区间合并时的lnum和rnum,具体下面有注释#include #include #include #include #include using names

2016-03-25 11:41:49 1139

原创 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 1815

原创 HDU 5122 水题

点击打开链接题意:给n个数的数列,求

2016-03-24 20:05:59 843

原创 ZOJ 3587 扩展KMP应用

点击打开链接题意:给定两个串,问从第一个串取出连续的两段,合并后可以拼成第二个的方法总数,这两段可以有重叠的部分思路:用扩展KMP求出extand数组,不懂KMP的可以看这篇点击打开链接,解释的很详细,extand[i](0=1,第一个字符的可能性就+1;第二个也一样,只要extand[i]>=2就+1;后面的情况我们可以将字符串反过来扩展KMP一次,求得结果与前面的意义相同,看代码吧,对

2016-03-24 18:25:29 903

原创 扩展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 628

原创 HDU 5025图论之BFS

点击打开链接题意:从K走到T,S为怪,走的时候就多花费一秒,走到T时收集m把不同的钥匙,但是规定收集n之前,必须1~n-1全部收集完毕,怪最多有5个思路:怪最多就有5个,然后钥匙是1~9把,我们每个点的状态就不会很多,在BFS时每个点的状态进行标记就行了,5个怪状态压缩着判断,因为这个怪在第二次经过的时候已经死了,不用花费时间去杀死它#include #include #include

2016-03-23 16:15:18 678

原创 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 709

原创 HDU 4081 次小生成树变形记

点击打开链接题意:n个点用n-1条边连起来,问两个点的人口A除以总的距离减去这两点的距离的最大值,表达能力有限,看看别人怎么翻译的吧,但是代码还是不错的......思路:用到的是次小生成树中的记录i->j的最大距离,然后枚举每条边,因为已经求出了最小生成树,所以如果你加入这条边后,肯定会形成一个环(画图会有奇效),然后我们减去这个环的最大值,就可以保证B最小,遍历所有边后,输出最大值,而且

2016-03-22 19:56:32 1098

原创 HDU 5137 数据结构之最短路

点击打开链接题意:给出一系列的关系图,每两个人求对方办事会花费多少钱,1要将儿子送到n那去读书,利用这些关系来完成,但是你和1有矛盾想让他完成不了,你有一个权利让其中一个人不做这些事,除了1和n之外的其他人都会答应你,如果1不能完成则输出Inf,不然输出,他要花费的最大价值思路:用最短路完成,遍历2~n-1这些点,将他们标记后就不能在使用,然后求最短路,如果走不到n,则输出Inf,不然我们

2016-03-22 16:03:34 876

原创 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 831 1

原创 HDU 3746 数据结构之KMP

点击打开链接题意:给T组数据,每组一个字符串,问最少添加多少个字符可以使这个串变成一个子串连续出现的串思路:利用KMP的next数组进行变换,next数组保存的是目前为止与字符串从头开始的匹配的程度,也可以看成从头开始的位置,所以如果Next数组最后一个为0,则需要在添加一个这样的串才能匹配成功,不然ans=len-Next[len]代表的是不能匹配的后面的串的长度,如果这个长度可以被le

2016-03-22 12:41:36 894

原创 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 747

原创 POJ 1698 图论之网络流

点击打开链接题意:T组数据,每组第一个为n,表示有n演出,接下来的九个数前七个表示周一到周日,如果为1,可以在这天演出,后两个数代表演出多少天才算完成任务和在多少周之前必须演出结束,问这个人可以完成这些要求吗思路:用最大流解决,建立一个源点和一个汇点,将源点与每一个节目相连,流量为这个节目需要的天数,然后将这个节目与每星期可以演出的日子连一条流量为1的边,最后将所有可以演出的日子与汇点连一

2016-03-20 13:50:42 1497

原创 HDU 4318 图论之最短路变形

点击打开链接题意:看样例说把,一共4个点,接下来输入一个数,代表当前点连接的点的数量,然后那几个点,样例里面就是1->2消耗50%的能量,1->3消耗70%的能量,2->1消耗30%的能量,2->4消耗20%的能量,一次类推,最后一行输入起始位置,重点位置,开始时的能量,问从起点走到终点,消耗的能量最少。思路:很明显的最短路变形,我们可以将求出从起点到终点剩余的最多的能量,用总能量减去它,

2016-03-20 11:19:14 1451

原创 POJ 1442 平衡树Treap新模板

点击打开链接题意:输入m个数,询问n个数,第一个数如果是3,就输出在m的第三个数输入完成后第1大的数,第二个就输出第二大的数,但前提都是在输入完U[i]个数后思路:用平衡树Treap进行插入和查询第K大的数,模版题#include #include #include #include #include using namespace std;typedef long long

2016-03-18 18:47:08 1720

原创 HDU 4585 平衡树Treap

点击打开链接题意:给出n组数,第一个数是id,第二个数是级别,每输入一个,输出这个人和哪个人打架,这个人会找和他级别最相近的人打,如果有两个人级别和他相差的一样多,他就会选择级别比他小的打架。思路:用treap完成,可以用STL水过,但要练Treap就写了平衡树的,对于每个人的等级,我们找到他的等级的排名t,然后找第t-1大的数和第t+1大的数,然后进行比较一下。讨论后输出,PS:没有好得

2016-03-18 17:07:38 1835

原创 平衡树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 1256

原创 二叉查找树模版

仅仅是自己整理的一份模版,怕时间久了会忘掉,主程序里面是自己做的一些测试,能够完成输出查找插入和删除四种功能,接下来会在这个程序上完成平衡树Treap的部分功能#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;c

2016-03-17 18:45:14 1432

原创 HDU 1698 线段树成段更新

点击打开链接题意:给你T组数据,每组N个数,初始为1,M个操作,每个操作将区间a到b的值更新为才,问n个数的和。思路:简单的线段树成段更新,需要用到懒惰标记,说白了懒惰标记就是用到的时候再去更新它,不然就放在那里#include #include #include #include #include using namespace std;const int inf=0x3

2016-03-16 20:53:50 1730

原创 HDU 5521 15年亚洲赛现场题目 图论之最短路

点击打开链接题意:两个人,一个人从1出发,令一个人从n出发,两个人可以停在某个点上,另一个人走过去,花费的时间是走的时间长的那个人用的时间,输出这样走的情况下,花费最小的时间。并输出哪个点符合这个最短时间,并输出,题目上题意很清晰。思路:通过两次最短路找到最短时间,再遍历一次找到符合的点就行了,但题难在如何建图,如果暴力建图的话就会超时,此时我们可以自己模拟多个点,然后建图的时候将每个集合

2016-03-16 20:12:56 619

原创 HDU 5040 图论bfs

点击打开链接题意:从M走到T,路上有摄像头,且每一秒都顺时针转90,摄像头可以照到旁边相邻的位置,如果被照到的话,走一步的时间为3,正常走的话时间+1,你也可以选择呆在原地不动,但时间也+1;问最短时间走到T思路:用bfs搜索,用优先队列维护最短的时间,每一个点的状态有四个,所以记录时的数组应该是5倍的,具体看注释#include #include #include #include

2016-03-16 16:27:35 631

原创 NEFU 1111 线段树区间更新+懒惰标记

点击打开链接题意:中文题目不解释思路:就是简单的区间更新,可以在网上看看别人对于懒惰标记的解释,这里不多说了#include #include #include #include #include #include using namespace std;long long num[1000010];long long num1[1000010];void buildtre

2016-03-16 13:42:11 1106

原创 coderforces 405E 图论dfs

点击打开链接题意:给出一个无向图,将图拆成两条相邻边的形式,输出两条相邻边对应的点,三个一输出思路:如果m为奇数的话,没有解。用dfs搜索到最底层,如果最底层的边是偶数,则每两个和上一个节点组成一个输出,如果剩下一个的话,则将它存入队列,和其他的边构成后输出。#include #include #include #include #include #include #inclu

2016-03-16 13:09:39 526

原创 HDU 3018 欧拉回路+图的性质

点击打开链接题意:给定m条无向边,每条边要经过一次且只能经过一次,问至少多少笔可以将整个图走完思路:这道题可以将图分为多个板块,对于每个板块,我们可以形成欧拉回路或者偶拉通路,如果可以形成欧拉回路的话,则需要判断每个顶点的度数,如果都为偶数,则说明可以行成欧拉回路,这样的话结果就+1;如果形成偶拉通路的话,则需要奇数顶点的个数/2相加。4个奇度顶点肯定是需要2条通路,不懂的可以在纸

2016-03-15 21:11:40 607

原创 POJ 2528 线段树+离散化

点击打开链接题意:将海报一张一张的贴在墙上,问最后在最上面还可以看见的海报的数量思路:将所有海报覆盖的位置进行离散化,然后二分找到每个区间覆盖的对应的离散化后的位置,然后更新节点值为当前海报的出现位置,最后统计整个大区间的节点的不同值的数量。#include #include #include #include #include using namespace std;type

2016-03-15 17:36:03 714

原创 POJ 2823 线段树简单操作

点击打开链接题意:给出一列数组,求出每k个的最小值和最大值,然后输出思路:就是最模版的查询最小值和最大值,模版都不用改的一道水题#include #include #include #include #include using namespace std;typedef long long ll;const int maxn=1000010;const int inf

2016-03-15 15:41:36 822

原创 POJ 2299 线段树求逆序数

点击打开链接题意:将一个无序的数列排列成有序的数列,问最少需要多少步可以完成思路:赤裸裸的求逆序数嘛~~,还是最简单的那种,线段树轻松过之,可能姿势不好,时间蛮长的之前有一道求逆序数的HDU的题目,那片文章已经介绍过原理,有兴趣的可以看看HDU1394#include #include #include #include #include using namespace

2016-03-15 13:03:05 1021

原创 HDU 1541 线段树简单更新

点击打开链接题意:给出n个点的坐标,每个点的级数由它左下角共有多少个点决定,若左下角有2个点,则说明这个点的级数为2,最后输出0--n-1级数的点的个数思路:因为纵坐标是递增输入的,所以我们只需看横坐标即可,横坐标大于多少个点,级数就是多少,所以线段树单点更新和查询,忽略了纵坐标后,题非常水#include #include #include #include #include

2016-03-14 20:55:44 1067

原创 POJ 2155 二维线段树基本操作

点击打开链接题意:给一个空的二维矩阵,初始元素为0,有两种操作,C x1 y1 x2 y2将左上角到右下角的所有数反转一下,即0变1,1变0,Q x1 y1 ,询问当前坐标的值。输出思路:用二维线段树,而线段树节点保存的是更新的次数,奇数次为1,偶数次为0,在查询时,一路查到x1,y1那个点之前的所有节点都要加起来,因为在更新的时候就没有更新到最底层的节点,有个别情况,可以自己根据一维的Y

2016-03-14 20:21:08 1352

原创 POJ 2559 水题

点击打开链接题意:给出一些连续的高度,求最大可以形成的长方形思路:对于每一个高度求出它左右用这个高度可以覆盖到的左右两个位置,用L[i]和R[i]来保存,相乘后输出最大值即可#include #include #include #include #include using namespace std;typedef long long ll;const int inf=

2016-03-14 19:53:02 1547

原创 POJ 2481 线段树

点击打开链接题意:有N头牛,每只牛有一个测试值[S,E],如果对于牛i和牛j来说,它们的测验值满足下面的条件则证明牛i比牛j强壮:Si Ej - Sj。现在已知每一头牛的测验值,要求输出每头牛有几头牛比其强壮。思路:将S从小到大排序,E从大到小排序,这样就保证第一个条件满足,线段树保存时与求逆序数的方法相同,求出比当前牛强壮的个数。#include #include #inclu

2016-03-13 17:47:21 764

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除