自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

绝望的乐园

在哪个世界都是一样的.....人们都是笑着,哭着,然后死去.....

  • 博客(42)
  • 资源 (1)
  • 收藏
  • 关注

原创 hdu 3966 Aragorn's Story(树链剖分)

题意:给出一棵树,每个节点有个权值,有3个操作,一个是将u,v路径上的点的权值增加C,一个是将路径u,v上的点的路径的权值减少C,还有一个是查询某一节点的权值。思路:树链剖分的题,思路还是很清晰的,但是最近一直犯二,调傻了都……每次写树链剖分感觉都不一样啊,这东西什么时候得弄个模板出来啊,写起来好蛋疼的说。 代码: #pragma comment(linker,"/STACK:

2013-10-30 17:32:05 841

原创 poj 1062 昂贵的聘礼(最短路)

题意:中文题……就不说了吧。思路:我们可以把这这个问题看成这个人买了一件物品,然后一件一件去换其他物品,最后换到酋长那儿时的最小花费,这样看就是一个最短路的问题,然而,由于有等级限制,所以直接搞是不行的,如何能在等级限制下算出最短路呢?由于n比较小,比较简单的想法就是枚举路径中最低等级,然后比这个小的等级和与这个等级差大于m的点就无视了,然后做最短路,每次做完最短路取到达1点的最小值就行了。

2013-10-27 19:30:07 627

原创 hdu 1860 Currency Exchange(最短路、深搜spfa)

题意:某人起始有s类货币,数量为v,他想利用汇率兑换,最后换回s,并且令货币数量增加,问是否能实现。思路:开始的时候想把权值变成负的,然后判负环就行了,写完之后也不知道怎么就wa了,好郁闷。后来看网上好多都是按着令权值增加的方法去找最长的路,后来自己也写了个深搜版的spfa,居然A掉了,总感觉找最长路这样的方法有点不科学,应该是因为这题只需要判环所以没问题吧。 代码: #inc

2013-10-26 20:23:22 989

原创 zoj 3717 Balloon(二分+2-SAT)

题意:给出n个组,每组有两个球心,在每个组中选一个球心,然后选一个半径R,令这些球的半径为R,并且保证这些球不相交,求最大的半径R。思路:二分枚举半径R,然后用2-SAT判定是否有解。由于每个组都要选,并且只能选一个,很容易能想到2-SAT模型,构图的时候只要枚举任意两个组,将两组之间的球心两两组合,如果这两个球心不能同时选中,则添加相应条件,然后跑2-SAT看有没有解就行了。 代码:

2013-10-26 16:57:35 680

原创 hdu 1535 Invitation Cards(最短路)

题意:给出n个点的有向图,要求求出从源点1到各个点的最短路的和与从各个点到1的最短路的和。思路:这题还蛮巧妙的,从源点到各个点的最短路好求,至于其它点到源点的最短路可以反向建图,然后再从源点开始做个最短路就行了,这样就相当于从源点“倒着走”走到所有点。 代码:#include#include#include#include#include#include#include

2013-10-25 18:48:19 734

原创 hdu 4056 Draw a Mess(并查集)

题意:给出n*m的矩阵,每次会用某一种颜色在上面画四种图形(圆、菱形、矩形、三角形),先画的会把后画的覆盖掉,问最后每种颜色占的格的数量。思路:这个覆盖问题可以用并查集搞,先对于某一行或列来说,先从最后的图形画,因为这个图形不会被前面覆盖,对于这个图形画的区间[l,r]来说,它能画上的就是之前没有画到的地方,用并查集从最右面的点开始扫,如果该点没有被覆盖,那么就覆盖它,然后把这个点和l所在集合

2013-10-25 16:12:44 1005

原创 hdu 4334 Trouble(哈希)

题意:有5个集合,每个集合有n个数,问时候能从每个集合中找一个数,使这5个数的和为0。思路:n有200,很显然O(n^5)枚举肯定是不行的,因为是要求和,我们可以先预处理出其中两个集合能组合成的所有和的值,然后再O(n^3)枚举,将这3个数的和取反,然后去查找是否有这个结果。枚举很简单,前面预处理就有问题了,以前遇到这种情况一般都是用map搞的,这题用map搞会MLE,没办法, 只好写哈希,唉

2013-10-23 18:31:33 715

原创 hdu 4339 Query(线段树)

题意:给出两个字符串,要进行两个操作,第一个操作是把某一个字符串的某一位字符改成另一个字符,另一个是查询从某一位置开始,最大的连续的stra[k]==strb[k]的个数。思路:刚开始看10^6吓到了,但是查询只有10^5,时限10000ms,线段树是可以搞的。用数组记录字符串每一位的情况,如果这一位两个字符串相同,那么就为1,否则就为0,然后用线段树维护区间最大连续的前缀长度就行了。 

2013-10-23 18:22:05 744

原创 hdu 4324 Triangle LOVE

题意:给出一个有向图,问有没有一个长度为3的环(三角恋)。思路:这题挺有意思的,刚开始YY了下,想着把tarjan改一改就能过了吧,写完以后交上去果断wrong了,后来想着暴力一点吧,直接每个点搜3歩试试,果断TLE了……后来想了想,可以再dfs的时候记录其父节点,然后当前节点找到它的子节点时,看看这个子节点和记录的父节点时候连边(由于已经给出了矩阵,所以很方便),这样遍历一遍就行了。这样搞虽

2013-10-22 18:27:47 661

原创 hdu 4325 Flowers(离散化+线段树)

题意:给出n朵花的花开时间,有m组询问,询问某一时间有多少花开。思路:刚开始就想离散化+线段树直接搞,但总觉得会超时,写完了以后交了一发直接过了……总感觉会有更优美的算法 代码: #include#include#include#include#include#include#include#include#include#include#define in

2013-10-22 16:21:06 912

原创 hdu 4301 Divide Chocolate(DP)

题意:给出一块2*n的巧克力,要求把这块巧克力分为k块,问有多少种分法。思路:这题感觉思路很经典啊,当时自己想的怎么去表示状态,发现时间空间都承受不了Orz……用dp[i][j][k]表示前i列巧克力分为j块时,第i列的两块巧克力是分开或者在一起时的分法总数,那么求第i列的状态时,可以根据第i-1的状态推出来,一共用12种情况,每种情况算一下会增加多少块就行了。 代码: #in

2013-10-22 12:58:27 746

原创 hdu 4302 Holedox Eating(优先队列)

题意:有一个小动物在长L的数轴上,最开始这只小动物在0点,每个时候,有可能有两种事件,第一种是数轴上某一点会出现一份食物,另一种是小动物想找吃的,这种情况小动物会找最近的一个食物,然后过去,如果两边的食物距离相同,那么就按最后一次移动的方向去,如果两边都没有食物,就呆在原地。思路:刚开始想用线段树做来着,但是想了想感觉好麻烦,后来想这题其实就是从左边找个最大值,从右边找个最小值嘛,那就可以用两

2013-10-21 18:40:56 913

原创 hdu 4424 Conquer a New Region(并查集)

题意:给出一棵树,每条边有一个容量,求一个中心点,让这个点到其他点的最大流量的和最大。思路:开始还在想是不是树形dp,唉,我还是太弱了……首先把边排个序,然后一条边一条边合并,假如我们已经算出了要添加的边所连的两个子树的最大流量和,由于边是从大到小添加的,当前边的容量一定是一个树中的点到另一个树的最大流量,那么两个子树合并后的最大流量和就是某一个子树的最大流量和+另一个子树中的点的个数×当前边

2013-10-21 12:27:16 928

原创 hdu 4427 Math Magic(DP)

题意:给出k个数的和n,它们的最小公倍数m,求有多少种数的排列满足要求。思路:开始还以为是数学题,没想到是dp……第二次因为用了long long超时了,也可能是我写的效率比较低吧。。。用dp[i][j][k]表示前i个数的和是j,最小公倍数是k的种数,状态转移方程也不是很难想,枚举一下m的因子就好了。 代码: #include#include#include#inclu

2013-10-21 12:18:34 784

原创 hdu 4421 Bit Magic(2-SAT)

题意:用一个矩阵给出n个数之间&、|、^的关系,问是否有一组数满足条件。思路:数的范围是2^31-1,因此可以按位算,想到2-SAT的话建图其实也很简单。但是这题时限有点高,刚开始把所有位一起建图写超时了,后来看别人题解一位位计算,如果遇到矛盾,直接break掉,这样写1600ms+过掉了。2-SAT貌似可以用tarjan优化的,可惜我还不会……有时间看看论文吧…… 代码:#i

2013-10-20 18:20:45 784

原创 hdu 4303 Hourai Jeweled(树形dp)

题意:给出一棵树,树上每个节点有权值,树上每条边有一种颜色。如果一条路径中没有两条相邻的边的颜色相同,那么就称这条路径为gorgeous roads,求所有gorgeous roads上的点的权值和。思路:这题写的真的很蛋疼啊,思路其实还算好想。我们用dp[u]表示可以从u的子节点到u的权值和,用cntp[u]表示可以从u的子节点到u的点的个数,对于一个结点u来说,如果有能到达u的路径,那么结

2013-10-20 10:21:27 679

原创 hdu 4313 Matrix(树形DP)

题意:给出一个树,树上有一些节点被标记了,要求删掉一些边,令所有的被标记的点之间不连通,并要让删除的边的权值最小。思路:比较明显的树形dp的题。如果搜到的点u上有标记,那么所有有标记的分支都要切掉,如果u没有被标记,那么只要保留较大的那个分支,其他的都切掉就好了,用dp[u]记录切掉u的子树中分支的花费。 代码: #include#include#include#incl

2013-10-19 20:32:11 777

原创 hdu 4318 Power transmission(最短路)

题意:给出一个输电电路的有向图,现在想把s点的点运送到t,输电过程中,如果经过一条边,那么就会损失w%的电力,问最后把电送到t时耗费的最少电力。思路:还算明显的最短路吧。正常做最短路的时候会用一个数组d[u]记录从s到u的最短路,但这里要记录的是从s到u损失的最少电力,那么就可以推导出从u到v损失的电力,这个值就相当于边的权值了。。。 代码: #include#include

2013-10-19 18:10:07 719

原创 hdu 3874 Necklace(离线+树状数组)

题意:给出n个数,有m组询问,每组询问求区间[l,r]中不重复的数的和。思路:感觉最近看到了好几道这种题……这道题还是很简单的,维护一个树状数组(线段树),从左到右把每个数字插入进去,我们用一个pre数组记录某一个数第一次出现的位置,如果要插入的数不是第一次出现,那么就把上一次出现的那个位置的值修改成0,然后再将数插入进去,之后处理以当前位置为终点的区间的询问就行了。 代码: 

2013-10-18 15:59:12 760

原创 hdu 3870 Catch the Theves(平面最小割)

题意:给出一个图,去掉一些边,让图不连通,求去掉的边的最小权值和(给出的图由n*n的矩阵构成)。思路:可以参考08年集训队论文《两极相通——浅析最大—最小定理在信息学竞赛中的应用》,写的很明白。可以把问题转化为最短路问题,感觉十分的巧妙…… 代码: #include#include#include#include#include#include#include#i

2013-10-18 15:28:36 692

原创 hdu 3873 Invade the Mars

题意:有n个城市,城市之间有有向路径连接,有的城市有可能被其他城市保护,如果保护它的城市没有被占领,那么该城市就不能被占领,但是可以在城市外等待,等保护它的城市占领后立即进入。求从1到n的最短路。 思路:这题读错好几次题意,蛋疼死了。开始想用spfa搞,但是总超时,然后看了看题解,写了dijkstra才过了。。大体思路就是用一个数组记录该城市没有被保护的时间,然后和最短路取较大的值。 

2013-10-18 10:45:22 784

原创 hdu 4433 locker(DP)

题意:给出两个长度相同的字符串,每个字符串由0~9的数字组成,每位数字可以同时和其后i位(0思路:很明显是个dp,但是怎么表示状态很不好想,我一开始写了个四维的dp,写着写着发现实在太难写了,最后只好放弃这个想法了。。。后来看了题解,发现别人是用3维的表示状态,即dp[i][x][y]表示前i位已经满足要求时,它的后一位为x,再后一位为y时所需要的最少操作数。这样表示状态就好写很多了,每个状态

2013-10-16 20:49:02 845

原创 LA 2031 Dance Dance Revolution(dp)

还记得当年看黑书的时候就看到过这个题,当时看书看了好久都没看懂,今天又看到这题,感觉不是很难了,啊哈哈。         题意是大胖子跳跳舞机,从某一地方移动到另一个地方需要消耗不同的体力,给出跳舞机需要踩的顺序,求最小需要的体力。跳舞机可以踩的一共就5个位置,所以可以以双腿的位置为状态,在这题中左右腿是没有区别的,所以只需要记录不同的就好了,然后根据两个腿的位置算出分别要移动到给定的位置需要

2013-10-15 19:23:28 759

原创 LA 3363 String Compression(dp)

题意:给出一个字符串,再给出一个字符串压缩的方法,问该字符串最少能压缩到多少位。思路:一直没思路啊,最后只能看题解,看了题解发现这题并没有想象中的难……用dp[i][j]表示区间i~j的最小长度,则dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]),另外,还要判断区间i~j的字符串能不能压缩,然后就没有然后了。 代码: #include#in

2013-10-15 17:45:37 735

原创 poj 3592 Instantaneous Transference(强连通分量+dp)

题意:给出一个n×m的矩阵,每个位置可能会有矿,最开始矿车在(0,0)的位置,每次矿车只能向下或者向左走,如果这个位置的字符是'0'~'9'的数字,代表该位置有相应的矿,如果是‘*’,表示这是一个传送点,可以传送到某一位置,‘#’代表岩石,矿车不能走,问矿车从(0,0)出发能挖到的最多的矿的数量。 思路:又是喜闻乐见的连通分量的题,把每个点可以走的位置连一条边,在同一个强连通分量中的矿都可

2013-10-15 13:05:39 825

原创 poj 1904 King's Quest(强连通分量)

题意:n个王子和n个女孩子匹配,每个王子可以喜欢多个女孩,但只能和一个匹配,题中给出一个完美匹配,问每个王子还能和哪个女孩匹配,并保证该王子和这个公主匹配后还有完美匹配。思路:这题以前看过差不多的,但是还是写sb了Orz……一个王子和其他女孩匹配的话,这个女孩必然要和另一个王子匹配,也就是说,这两个王子或者一些王子之间互换了匹配,那么如何才能保证能够互换呢,先是建图,每个王子向每个可以匹配的女

2013-10-14 21:01:02 687

原创 poj 3114 Countries in War(强连通分量+最短路)

题意:这题题意看了半天没看懂,最后看数据YY了一下才弄明白。给出一个有向图,同一个强连通分量中的点的距离为0,有k个询问,每个询问问从u到v的最短路是多少。思路:看完题思路差不多就出来了吧, 先求个强连通分量,然后缩点,最后做个最短路就行了,点最多有500个,floyd目测是不行的,我用的spfa,dijkstra应该也没问题。。。 代码: #include#include

2013-10-14 19:00:26 734

原创 poj 3160 Father Christmas flymouse (强连通分量+记忆化搜素)

题意:给出n个点,m条有向边的图,每个节点有一个权值(可能为负),求从某一个点出发所能获得的最大权值(经过一个点时,可以不获取该点的权值)。思路:这题不是很难,由于节点的权值可以不获取,因此,如果这个节点的权值为负,那么就相当于0。在同一个强连通分量中,所有点的权值都可以获得,因此,可以先求一个强连通分量,把同一个强连通分量中的权值累加起来,最后会得到一个DAG,然后从每一个节点开始dfs一下

2013-10-14 13:27:36 751

原创 spoj 2916. Can you answer these queries V(线段树)

题目链接:http://www.spoj.com/problems/GSS5/ 题意:给出n个数,求区间最大子段和,但是限制了子段的起点终点,起点要在[x1,y1]内,终点要在[x2,y2]内。思路:其实也不是很难,但是要分情况讨论,比较烦。首先,如果y1 代码: #include#include#include#include#include#include

2013-10-14 10:45:17 730

原创 spoj 2713. Can you answer these queries IV(线段树)

题目链接:http://www.spoj.com/problems/GSS4/ 题意:给出n个数,有两个操作,第一个操作是将区间[x,y]中的数都开根号,第二个操作是求区间[x,y]的和。思路:这题以前做过类似的……对于一个10^18以内的数,最多开6次根号它的值就到1了,也就是每个数最多只要开6次根号,这样更新的时候只要单点更新就行了,如果一个区间内的值都是1了,那么就不用在更新了。

2013-10-13 18:42:20 831

原创 spoj 1716. Can you answer these queries III(线段树)

题目链接:http://www.spoj.com/problems/GSS3/ 题意:给出n个数,有两个操作,一个是查询区间最大子段和,另一个是修改某一个数。 思路:其实这题挺简单,依然是线段树,和GSS1差不多,但是由于我犯了各种傻逼错误,交了好多次才过,好蛋疼。。。做法和GSS1差不多,由于有修改操作,因此再加个数组用来记录区间和就行了。。。 代码:#include

2013-10-13 17:48:03 818

原创 spoj 1557. Can you answer these queries II(线段树)

题目链接:http://www.spoj.com/problems/GSS2/ 题意:还是求区间最大子段和,不过要求重复的数字只能算一次。 思路:感觉这题好难想……看了看题解,总算想明白了。首先是解决重复数字的问题,这需要离线处理,将每个数字从左到右依次插入到线段树中,用pre[]记录这个数字上一次出现的位置,那么在这个数字之前的就不需要增加当前的数字了,因此只要更新处理它们之间的

2013-10-13 10:38:33 1014

原创 spoj 1043. Can you answer these queries I (线段树)

题目链接:http://www.spoj.pl/problems/GSS1/ 题意:给出n个数,询问某一区间中,最大的连续子段和。思路:用线段树维护3个值:maxv[rt]:区间最大连续子段和,pre[rt]:区间最大前缀和,suff[rt]:区间最大后缀和,就是合并时改一改就好了,其实很简单的。 代码: #include#include#include#in

2013-10-13 10:23:39 939 2

原创 spoj 10628 Count on a tree (主席树+lca)

题意:给出一棵树,树上每个节点都有权值,有m个询问,求u到v的路径上第k大的数。思路:用主席树为树上每个节点建立一棵线段树,和区间第k大的求法差不多,由于是在树上,只是添加的顺序有一些问题。每个节点对应的线段树表示从当前节点到根节点的路径中的数据,根据这个,如果我们找到了两个节点的lca,那么我们可以发现,这两条路径其实覆盖了它们公共祖先到根节点的路径,求第k大的时候只要把这一部分减去就行了,

2013-10-11 21:50:07 913

原创 主席树学习笔记

研究了好久的主席树,终于看明白一些了,把poj2014(区间第K大)A掉了,有点泪目了……自己写写总结吧。       主席树这个数据结构我之前就看过一次,但是看了一天也没明白,这两天又拿出来看了看,终于有些进展了(我真是太弱了)……       主席树,还有其他的名字:可持久化线段树,函数式线段树,它涉及到函数式编程,有兴趣的同学可以查资料看看。感觉网上关于主席树的资料不算多,有些写的挺

2013-10-10 19:49:15 1742

原创 hdu 4605 Magic Ball Game

题意:给出一棵二叉树,树上每个节点都有一个权值w[i],从根节点向下扔一个权值为x的小球,小球到达每个节点有三种情况:①x==w[u],小球停止运动 ②xw[u],小球有1/8的概率向左走,有7/8的概率向右走。有q个询问,每个询问有两个值v、x,回答从根节点扔小球,小球停在v或经过v的概率。思路:由于一棵树从根节点到任意一个节点的路径是唯一的,那么我们只要将询问离散化,然后用一个数据结构去维

2013-10-08 16:03:55 711

原创 poj 2186 Popular Cows

题意:有n头牛,若A认为B是受欢迎的,那么B的人气+1,认为某头牛受欢迎是可以传递的。最后问有多少头牛的人气是n-1。思路:先用tarjan求个强连通分量,可以得到一个DAG,则同一个强连通分量中的点相互认为对方受欢迎。然后选择所有入度为0的点,从这一点开始遍历,计算其子节点的人气,需要注意的是由于有横叉边,所以到某个节点直接从这个点往下搜是不对的,一个简单的方法就是计算到达这个点的次数,如果

2013-10-07 16:02:53 920 2

原创 poj 1456 Supermarket

题意:给出一些商品的清单,清单上有每个商品能获得的利润和可以出售的最后期限,卖一件商品的恰好需要一天,问能获得的最大利润是多少。感觉每次读题都好痛苦啊。。。思路:其实是蛮简单的贪心,感觉挺好玩就写发题解吧……可以想到,想要让利润最大就要让价值最大的产品尽可能多的卖出去,那么就要按照利润排个序,然后给每个产品安排一个合理的时间,所谓合理,也就是说在保证该产品能卖出的条件下,尽可能让其他产品也能卖

2013-10-07 12:50:12 774

原创 hdu 4467 Graph

题意:给出n个点,m条边,每个点都有一个颜色,黑色(用1表示)或白色(用0表示)。有两种操作,一种是询问所有边中满足边的两个点是00,01 or 11这三种情况的边的权值的和,另一种是修改某一点的颜色。思路:这一题最直观的思路就是暴力,查询简单,用一个数组预处理三种情况的边就能在O(1)的时间内完成了,修改一个点u的话,再遍历所有与u相连的点,把数组更新就好了。但是这样还是有问题的,由于m比较

2013-10-06 20:48:56 865

原创 poj 1417 True Liars

题意:有p1个好人,有p2个坏人,给出n个信息,每个信息表示编号为x的人和编号为y的人是否为同一集合,问是否能唯一确定p1中有哪些人。思路:首先要做一个并查集,用rt[i]记录i与根节点的关系,0表示与根节点属于同一集合,1表示与根节点所在集合不同,这样把所有信息处理完以后,会得到若干个集合,每个集合中只能获得不同集合的人数,但是不能知道某个集合是否是好人。这样的话还要做一个dp,用dp[i]

2013-10-05 19:58:31 1148

C#打字小游戏

C#写的,练练手。。。写的比较简单,但是忘了写注释……

2012-04-15

空空如也

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

TA关注的人

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