自定义博客皮肤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)
  • 收藏
  • 关注

原创 HDU 3849 双联通+Trie树+并查集

点击打开链接题意:给了n个人和m个关系,然后找出所有的桥并输出思路:简单的找桥就行了,然后人的编号就可以用Trie树来完成,最后坑点如果图不连通输出0,联通性用并查集就行了#include #include #include #include #include #include using namespace std;typedef long long ll;typedef

2016-07-29 19:24:14 445

原创 HDU 5769 后缀数组

点击打开链接题意:给一个字符,下面一个串,问你下面的串可以组成的子串中有多少个包含这个字符的思路:比较简单的一个后缀数组,比赛的时候因为卡在了其他题上,就只看了一眼,并没有写,赛后补上感觉真的很简单,因为后缀数组可以处理重复子串所以我们直接用它的sa和height数组就行了,因为要满足有给定的字符,所以我们将sa[i]代表的串里有这个字符的全部标记起来,只有这些才会对我们的结果有贡献值,然

2016-07-29 10:28:58 1534

原创 HDU 2242 强联通分量+树形DP

点击打开链接题意:中文思路:题目说切掉一条边使得图分成两部分,也就是割边,那么边双联通模版套入,正好就可以缩点,然后在缩过的图上删除一条边满足题目要求,当然的是若没有割边,就输出impossible就行了,然后树形DP计算出每个点的所有儿子节点的权值即可,计算出最小的值   PS:写的时候以为联通块的编号就是按照块数排下来的,其实不一定,也可能是模版的问题#include #includ

2016-07-27 21:13:53 1073

原创 HDU 1827 3072强联通分量

点击打开链接题意:中文思路:因为是有向的传递,那么直接强联通先缩点,之后需要打电话的人数就是缩完点后的入度为0的所有点,然后最小费用就是在每一个联通分量中找出一个费用最小的全部相加即可#include #include #include #include #include #include using namespace std;typedef long long ll;t

2016-07-27 09:44:20 323

原创 HDU 3861 强联通分量+最小路径覆盖

点击打开链接题意:将所有的点分入几个集合中,要求若u可以到v,且v可以到u,那么u和v必须在一个集合中,且集合中的点必须满足对于任意一个点对(u,v)u能到v或者v能到u,问最少的集合满足条件思路:因为u到v且v到u必须在一个集合,那么可以用强联通分量进行缩点,然后下一个条件是对集合中的所有点对,那么这个集合可以形成的肯定是一条链类型的集合,那么就可以转化成选择几条链可以将所有的点(这个点

2016-07-27 09:07:03 542

原创 POJ 2553 强联通分量

点击打开链接题意:给一个有向图,然后现在定义一个特殊点,定义为它能够到达的点也都能够到达它,问有哪些点是特殊点思路:有向图问的是相互到达,那么强联通分量先缩点就好了,对于每一个强联通来说,这个分量内的点都是相互到达的,但是若这个联通分量里有一个点与分量外的点相连,那么这个联通分量内的所有点都不满足特殊点,所以我们需要找到那些分量没有出度的#include #include #inclu

2016-07-26 20:08:13 427

原创 HDU 3639 强联通分量

点击打开链接题意:给一个有向的图,然后找出一个最大的值,这个值是对于一个点来说,能够到达它的点的个数,如果有多个符合按照字典序输出这些点思路:因为是个有向图且边比较多,如果暴力弄的话无疑会超时,而强联通可以很好的减少多于的边,而强联通后对于一个联通分量来说我们将里面的个数记录下来,然后将图反着建一下(一会说为什么),这样我们现在的图就是一个边较少的图,而每个分量的元素个数就是点权,然后现在

2016-07-16 18:39:56 154

原创 HDU 3616 最小割

点击打开链接题意:给一个地图,0代表敌人的位置,-1代表不能走的,然后大于0的代表草堆可以点燃,数字代表的就是点燃需要的时间,现在让你点燃一些草堆使得敌人怎么也不能走出去,问所需要的最短时间思路:这与从1走到n,割掉几条路使得走不到n是一个意思,那么就是最小割的模型,那么也比较好办,图建成两部就行,但是不是二分图,左部是敌人出发的点也就是0的所有点,右部自然就是所有的草堆了,然后这题呢意思

2016-07-16 13:54:57 630

原创 HDU 3619 BFS+优先队列

点击打开链接题意:给一个地图,从S走到T,然后给了钥匙的位置,地图上数字点代表如果走这个点则要消耗数字的能量,而A到E是门,一个钥匙可以开一类门,问最少消耗多少能量就可以走到T思路:对于钥匙来说,直接用状态压缩判断钥匙是否取过,然后因为是要走最小的花费,那么要用优先队列,没什么可以注意的,就是一个钥匙可以开一类门,而不是只能开一个门,注意着谢谢就应该能过,并不难的一道BFS#include

2016-07-15 14:34:35 969

原创 HDU 4302 线段树

点击打开链接题意:在一个0到L的坐标上,0是在某个位置摆个蛋糕,然后1是吃蛋糕,但是吃的必须是离自己最近的,若没有蛋糕就不动,若有两个蛋糕与其距离相等,那么我们选择上一步的方向来吃蛋糕,问最后这个人走了多远思路:用两个队列应该就可以很简单的完成,但是想到了线段树,就写个线段树,而线段树一样维护的是最大值和最小值,不过这两个值都是对应的位置,那么对于队列来说肯定就是也维护这两个值,然后讨论处

2016-07-15 13:22:44 937

原创 HDU 4308 BFS+优先队列

点击打开链接题意:从Y走到C,#代表不能走,走*的话要花费C元,P是传送门可以到达任意一个P,问最小花费思路:直接优先队列模拟一下就行,BFS搜一下,P直接记录,遇到了就判断它能到达的点能不能走就行了,easy#include #include #include #include #include #include using namespace std;typedef lo

2016-07-14 20:11:40 1413

原创 HDU 2828 舞蹈链可重复覆盖

点击打开链接题意:给n个灯,每个灯能保持亮的状态的条件给出,最后问能否将所有的灯都保持亮的状态,能的话输出每个开关的状态思路:明显的舞蹈链可重复覆盖嘛,列为n个灯,然后行为每个开关开还是关,所以行要有2*m行,注意的是在跑舞蹈链的时候,每一个开关只能有开或关的状态,所以我们要判断一下它对应的状态是否走过#include #include #include #include #inc

2016-07-14 19:30:11 1583

原创 HDU 3607 线段树

点击打开链接题意:个n个点的高度以及点上的金子数,现在从1开始走到n,要求每走一步高度要严格递增,且只能向右走,问最多可以捡到多少金子思路:这种题看起来像是dp,因为求最多什么的嘛,但是其实用线段树就可以求解,然后数据范围过大我们需要离散化一下,然后遍历每一个点,找到它的排名,然后询问1到它的排名下一位的最大值,加上它自己的金子就是走到这的最多可以获得的,然后更新这个点的金子数,依次下去到

2016-07-14 16:49:03 1248

原创 HDU 3605 网络流

点击打开链接题意:n个人和m个星球,现在要求n个人全部住在这m个星球上,然后每个星球能居住的人数有上限,每个人还有自己喜欢的星球并且他只会去自己喜欢的星球,问能否成功思路:很明显的一个网络流,敲之交之TLE,然后返回来一看原来边太多了,但是我们可以发现星球还是很少的,那么与有一个背包想法类似,我们用状态压缩来代替左部,而右部还是星球,那么我们拿出一个状态来判断一下是否可以住在这个星球上来连

2016-07-14 16:14:08 1321

原创 HDU 4930 斗地主模拟

点击打开链接题意:给两个人的牌,第一个是地主的第二个是农民的,现在问你第一个这回合能否胜利,胜利条件是农民没有比地主出的大的牌或者地主将牌打光了,然后它的大小比较什么的上面给了与我们平时玩的没什么差别思路:首要判断的就是地主这手牌能否打光,打光就直接yes了,然后判断王炸,若地主有就

2016-07-14 12:36:38 421

原创 HDU 3599 最短路+最大流

点击打开链接题意:给n个地点及许多边,现在问你要用最短时间内有多少种不相交的最短路思路:因为要的是最短路上的边,所以先跑最短路将满足的边全部拿出来建网络流的图,然后在跑个最大流就行了因为一条边只能用一次,所以网络流就行#include #include #include #include #include #include #include #include using n

2016-07-13 19:38:58 1642

原创 HDU 3600 乱搞

点击打开链接题意:问你能否将原图形转化成给定的图形,就是八数码的变形思路:这对于本弱来说哪有什么想法啊,但是在网上看到一个大神的写法和证明具体的,那么我们直接引用性质就可以简单的求出来了,若n为奇数,则计算除0以为的逆序数和,若为偶数则YES,若n为偶数,则需要将逆序数和0走到角落处的高度差相加,若为偶数则YES,否则NO   PS:10年的多校题目,爆0的节奏#include #inc

2016-07-13 17:12:21 442

原创 HDU 1534 查分约束

点击打开链接题意:要完成n个任务,每个任务有完成的时间,然后下面给了四种条件,问最快完成的情况下,每一个任务的开始时间思路:四个条件就是给出的四个查分约束方程,然后因为是要时间最短,所以求得是最长路,但是因为没有起点和终点,那么我们可以添加一个起点,使它与任务点相连一个0的边,最后求出的距离就是开始的时间,然后有环则是impossible#include #include #inclu

2016-07-13 12:21:14 1118

原创 HDU 1384 查分约束

点击打开链接题意:给了n个区间,要求每个区间至少有C个数字出现,问满足的最小的数字个数思路:用Si代表0到i的区间内的数字个数,然后可以写出查分约束方程,对于一个区间则Sa-S(b-1)>=C的,然后隐含的一个条件就是Si-S(i-1)>=0且=的形式#include #include #include #include #include #include using name

2016-07-12 20:53:13 1393

原创 LIGHTOJ 1348 树链剖分

点击打开链接题意:给一个树和树上点的权值,两个操作,一个是将点的权值修改,一个是询问u到v的点权和思路:模版题,kuangbin开的这套题为什么这么模版的写的人这么少,可能大神们不屑于写这种题吧(弱哭)#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include

2016-07-12 11:18:05 1138

原创 FZU 2082 树链剖分

点击打开链接题意:中文思路:最基础的树链剖分,区间求和以及单点更新,结果要用long long 就没什么了#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;const in

2016-07-12 10:52:01 1178

原创 HYSBZ 2243 树链剖分

点击打开链接题意:中文思路:一看就是应该用树链剖分与线段树的结束,主要是结合什么呢,因为需要连续的一段一段的,所以我们肯定是要用区间合并,那么区间合并需要用到什么呢,就是整个区间的最左端和最右端的元素及这个区间已经形成的段数,那么我们合并的时候就要判断一下左儿子的最右端与右儿子的最左端是不是相同,然后在处理,而更新就用个懒惰标记就可以完成了,而查询一段是与正常的区间合并是一样的,但是因为是

2016-07-11 21:04:23 1495

原创 POJ 3237 树链剖分

点击打开链接题意:给一个树,三种操作,一个是将第I条边的权值改变,一个是将u到v的所有边的权值取反,一个是询问u到v的路径中边的最大值思路:和模版的树链剖分没什么区别,这题唯一的坑点就是线段树的懒惰标记,只要有更新操作或者查询操作就都要pushdown(),然后改权值的比较简单,单点更新,而区间取反我们可以用两个数组直接模拟,一个最大值的,一个区间最小值的,然后一旦取反了,就将最大值改为负

2016-07-11 16:17:35 1241

原创 POJ 2763 树链剖分

点击打开链接题意:给一个树,然后树上的边的边权,然后两个操作,一个是询问u到v的路上权值和,一个是将第几条边的权值修改思路:与SPOJ 375 的那道题目很像,都是边上的权值,然后维护一个线段树进行修改和求和就行了#include #include #include #include #include #include using namespace std;typedef

2016-07-11 14:14:57 1486

原创 HYSBZ 1036 树链剖分

点击打开链接题意:中文思路:和最简单的HDU 3966 一样,我们只需要用线段树维护两个值就行了,一个最大值一个和,然后注意一下的就是有的题目是点权有的题目是边权#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include

2016-07-11 11:15:02 1137

原创 HDU 3966 树链剖分

点击打开链接题意:给一个树,三个操作,一个询问点的权值,一个将u到v路径上的点的权值增加,一个是减少思路:还是比较裸的模版题,线段树改为区间更新就好了#pragma comment(linker, "/STACK:1024000000,1024000000")#include #include #include #include #include #include using

2016-07-10 16:15:19 1483

原创 HDU 5387 乱搞

点击打开链接题意:给个时间,然后问时针分针秒针两两的角度思路:对于每一个来说,都转化成秒,然后分类讨论一下即可,只要能将样例写出来就不会错的#include #include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f3

2016-07-09 16:37:55 4990

原创 HDU 5384 AC自动机模版

点击打开链接题意:n个A,m个B,对于每个A,输出所有B在A中出现的次数思路:和AC自动机模版题2222相同,唯一的区别就是n个A不能开二维,自己处理一下就OK了#include #include #include #include #include using namespace std;typedef long long ll;const int inf=0x3f3f3f

2016-07-09 15:07:08 1346

原创 HDU 3681 BFS

点击打开链接题意:在一个地图中,D代表不能走,F代表起点,S为空地,Y是要收集的东西,然后G是加油站,每走一步消耗一点能量,到加油站可以加满油,但一个加油站只能用一次,问从起点出发将所有Y收集所需要的最小的油箱容量思路:这题我们可以先不管油箱直接走看需要多少步可以将所有的Y收集,若不能直接-1,然后二分这个最小的油箱的容量,里面的加油站和Y都用状态压缩来判断就行,唯一注意的就是对于一个状态

2016-07-09 13:48:21 1359

原创 SPOJ 375 树链剖分

点击打开链接题意:给个树和树上的权值,两个操作,Q u v,问u到v的边上的最大权值,C u v,将第u条边的权值改为v思路:今天学了学树链剖分,这题是个检验模版的题目,理论我是解释不清楚的,自己在九野聚聚那学来的一份模版#include #include #include #include #include #include using namespace std;type

2016-07-08 20:25:08 1531

原创 HDU 5373 乱搞

点击打开链接题意:给一个数n和t,每一次操作是将n的所有位的和的值加在n的后面,共操作t次,问最后形成的数能否被11整除思路:首先要知道的是什么样的数可以被11整除,百度一下只要这个数的奇数位的和与偶数位的和的值可以被11整除就可以了,那就好办了,直接模拟一下这个数的进程,然后统计奇偶的和就行了#include #include #include #include #include

2016-07-08 18:01:33 503

原创 HDU 5372 线段树

点击打开链接题意:两个操作,0是添加一段线段,然后问添加的这段线段完全覆盖之前的多少个线段,然后0是将第b个添加的线段删除思路:对于一个当前添加的线段来说,它能完全覆盖的线段个数就等于大于等于这个线段的左端的数量减去大于右端点的线段数量,因为题目中有个至关重要的条件那就是每次添加的线段的长度是越来越大的,那么对于之前的线段只有大于等于左端点的才可以,这么说吧,之前的线段的左端点比当前小的,

2016-07-08 17:29:50 1505

原创 HDU 5361 最短路变形

点击打开链接题意:给了n个点排成一行,每两个距离为1,然后对于每个点来说它有个L和R,意思是距离在L到R中间的所有点它都能到达,费用是C,问从小出发的单源所有的点的距离思路:看了网上神犇的题解有了点思路,因为每个点出去的费用都是相同的,而且费用的值大于0,那么1点直接到达的所有点的最短路就不需要在更新了,因为剩下的肯定是比它大的,那么对于这些个点我们压入队列,但是注意我们这里的dis设定为

2016-07-07 20:05:12 1919 1

原创 HDU 5360 优先队列

点击打开链接题意:对于n个人,写出一个选择的顺序使得最后参加的人数最多,对于当前的人,它参加的条件是已经参加的人数要大于等于它的L小于等于它的R,有多种情况满足输出一种既可思路:想一想如何使得人数最多,如当前参加的人数是ans个,那么所有L小于等于ans且没有参加的人都可以试一试,那么这么多人选择哪个最优,当然是选R最小的满足大于等于ans的那个人,这些人用优先队列存起来即可,只要找到满足

2016-07-07 13:07:30 518

原创 HDU 5349 乱搞

点击打开链接题意:三个操作,1是加入一个数,2是将最小的数删除,3是将最大的数输出,若没有元素输出0思路:乱搞就行了#include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;con

2016-07-06 16:45:52 550

原创 HDU 5352 最大流

点击打开链接题意:共有三种操作,1是代表可以将与1在一个联通块的点修复,但是最多只能修复k个,修好的点不会在破坏,2代表连接u与v,3是破坏p条道路,问最多可以修多少个点,多种情况输出字典序最小的思路:每次的1我们直接暴力的将与它在一个联通块的点加进来,然后为了保证

2016-07-06 14:34:24 1249

原创 HDU 5336 BFS

点击打开链接题意:有n个水池,每个水池目前的水滴数量给你了,一旦水池中的水滴数量大于4,这个水池就会爆,并且分成四个水滴向四个方向出发,水滴只有两种情况,一是走出地图二是碰到水池,现在给你一个爆炸点,这个点会向四个方向发射水滴,问你t秒后的所有点的状态,水滴一秒移动一个格思路:就是用bfs去模拟一下每个水滴的状态,因为时间是10000,而水池共有100个,那么最坏的复杂度就是4000000

2016-07-05 20:28:22 1694

原创 HDU 5328 类似尺取

点击打开链接题意:给一个序列,然后问你连续最长的一段满足等差或者等比思路:因为是连续的就好做很多,对于一段序列的等差值,若进来的值使得等差值不同,那么就更新这个值,对于等比也是一个意思,比较简单#include #include #include #include #include #include #include using namespace std;typedef

2016-07-05 19:17:04 464

原创 HDU 5335 BFS

点击打开链接题意:从左上角走到右下角的路径中要求所有数字组成的二进制最小思路:考虑如果第一个元素不是1的话,该怎么办,因为要求前缀0不输出,那么我们找到所有的0可以走到的1,然后在处理,因为要这个二进制数最小,所以它的长度越短越好,那么对于所有0到达的第一个1,我们找到与终点的最近距离,然后将满足的全部放进容器中,如果第一个是1的话,也一样进去的只能是第一个元素,然后现在的元素到终点的距离

2016-07-05 18:51:26 1755

原创 HDU 5323 DFS

点击打开链接题意:给一个线段树类型的树,问你有没有一个0到n的线段树满足有一个区间是L到R,多个的话输出n最小的思路:根据线段树的定义,m=(le+ri)>>1,然后左右区间为(le,m)(m+1,ri),这样根据le+ri的奇偶性可以向右推出这个区间可能的父区间,并且还可以根据这个推出它的向左延伸的两个可能的父区间,但是一定要有减枝,如当左端点小于0或者右区间的值已经比确定的答案还大,还

2016-07-04 20:36:08 451

空空如也

空空如也

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

TA关注的人

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