自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

绝望的乐园

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

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

原创 hdu 2489 Minimal Ratio Tree(枚举+最小生成树)

题意:给出n个点的完全图,每个节点和边都有权值,求m个点,并且令m生成的树边权和与点权和比例最小。思路:直接枚举所有情况,然后做最小生成树就行了。。。代码:#include#include#include#include#include#include#include#include#include#include#include#define inf 0

2014-01-31 21:35:00 724

原创 spoj 4487. Can you answer these queries VI(伸展树)

题意:给出n个数,有四种操作:①在x前插入一个数②删除x③将x的值替换为y④查询区间[x,y]的最大连续子段和。思路:伸展树搞,思路不难想……这题写得十分蛋疼,前面小bug改完了各种TLE,加了各种优化才过。。。代码:#include#include#include#include#include#include#include#include#include

2014-01-30 16:44:20 702

原创 SGU 167 I-country(DP)

题意:给出一个n×m的矩阵,要在矩阵里选K个元素,另这些元素的和尽量大,并且任意两个元素相互可达并且它们之间到达的路径不能走两种以上的方向(比如每步只能走上或右)。思路:一个非常非常恶心的dp……由于题中给出的要求,我们选的这个区域是有一定限制的,那就是这个图形不能凹进去,如果凹进去,一定会有两个元素之间要走至少3个方向才能到达。用dp[i][j][k][sx][sy][l]来表示状态,i表示

2014-01-29 20:27:00 915

原创 hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)

题意:给出n个数绕成一圈,求一个长度不超过k的连续序列,使得它们的和尽量大,若有多解,令起始位置尽量小,还有多解,令区间长度尽量小。思路:用单调队列可以O(n)解决,以前虽然做过单调队列的题,但也忘差不多了。。。把由于有环,那么把n个数复制一遍放在后面,反正长度不能超过k,没有问题,剩下的先把前n项和求出,对于i,每次向队列中添加sum[i-1],对于队列中的j,若sum[j]>sum[i-1

2014-01-29 12:36:53 647

原创 UVALive 4670 Dominating Patterns(AC自动机)

题意:给出n个串,再给出一个文本串T,问哪些串在文本串中出现的次数最多。思路:直接AC自动机搞,感觉还是比较裸的,每次遇到结尾的单词就给这个串出现次数+1。看完Trie和KMP感觉AC自动机还是蛮好理解的,之前看了看算导,感觉KMP和AC自动机都是一种有限自动机,把状态转移图弄好了就ok~代码:#include#include#include#includ

2014-01-26 11:40:02 1035

原创 SGU 158 Commuter Train(暴力+枚举)

题意:有一个站台长为L,现在又M个乘客,给出乘客的位置,火车有N个门,给出门距离车头的位置,现在求一个位置S,使得每个乘客到最近的门的距离的和最大。思路:这题想了好久,没想到暴力就能过……真是忧伤。。。直接暴力枚举S,精度为0.1,然后算距离,因为给出的位置都是升序的,因此很好算,只要扫一遍就能算出来了。。代码:#include#include#includ

2014-01-25 20:38:14 878

原创 hdu 2594 Simpsons’ Hidden Talents(KMP)

题意:给出两个串s1和s2,求s1的一个最长的前缀,满足这个前缀是s2的后缀。思路:依然是kmp,不过和普通的匹配略有区别。用s1去匹配s2,一直匹配到结尾,返回这时候匹配成功的长度即可,注意,由于是要求一个后缀,所以中间如果匹配成功,那么当前指针j要转移到next[j]。代码:#include#include#include#include#include#

2014-01-25 19:29:28 899

原创 hdu 1358 Period(KMP)

题意:给出一个串,计算这个串每个前缀是否能形成循环,并输出位置和循环节长度。思路:这题明白next数组的性质以后就非常简单了。当next[i]!=0&&i%(i-next[i])==0时当前前缀有循环,循环节长度为i/(i-next[i])。代码:#include#include#include#include#include#include#inc

2014-01-25 18:26:07 761

原创 hdu 3746 Cyclic Nacklace(KMP)

题意:给出一个串,问最少在串末尾添加几个字符,才能让串中出现循环。思路:这题要很好的理解next数组的性质才行,构造完next数组以后,有这样一个性质:字符串的最小循环节的长度为len-next[len],如果len%(len-next[len])==0,那么字符串的最小周期为len/(len-next[len]) 。           这是如何得到的呢,先来看下下面的图:

2014-01-25 17:58:24 834

原创 hdu 3336 Count the string(KMP)

题意:给出一个字符串,求它所有的前缀与它匹配的次数的和。思路:KMP的应用……KMP构造的next数组中恰好包含着字符串的前缀的信息,因此,如果next数组没有转移到0,那么就说明他们有着公共的前缀,此时就是前缀和中间某一个串匹配上了。。。最后加上n个前缀本身就是答案……代码:#include#include#include#include#include#i

2014-01-25 15:03:51 811

原创 UVA 11488 Hyper Prefix Sets(Trie)

题意:有n个字符串,现在要求一个集合S,S中的串是给定的,他们的值为S中公共前缀的长度乘串的个数,求最大的这个值。思路:建Trie树的过程中可以统计当前前缀的串的个数,把所有串插入后就能得到结果了。。也是比较裸的题吧代码:#include#include#include#include#include#include#include#include

2014-01-24 16:08:56 917

原创 UVA 11732 strcmp() Anyone (Trie)

题意:给出N个串,问根据给出的程序两两比较的次数。思路:把所有串建成Trie,每次边插入边计算和前面的串比较的次数,然后加起来,所有串插进去以后就得到结果了。最开始每个节点开大小62的数组,发现各种TLE,应该是memset搞超时了,后来没办法,只好看着网上的做法用了左儿子右兄弟表示法,这东西之前在数据结构的书上看过,但是从来没用过。。。。代码:#include

2014-01-24 15:21:06 1051

原创 LA 3942 Remember the Word(Trie+DP)

题意:给出S个不同单词组成的字典和一个长字符串,把这个字符串分解成若干个由S组成的单词的连接有多少种方法。思路:先把S都插入字典树,dp[i]表示从i开始的字符串的分解方式的个数,则每对应一个从i开始的在S集合中的串ss,dp[i]+=dp[i+strlen(ss)]。代码:#include#include#include#include#include#in

2014-01-24 11:14:00 1028

原创 hdu 3488 Tour(最小费用流orKM算法)

题意:给出一个有向图,现在要选出一个或多个没有交集的环,使得所有的顶点都在这些环中,且仅出现一次,并令选中的边的权值和最小。思路:按要求看的话, 最后选完以后,每个顶点的入度和出度都为1,也就是说每个顶点只关联两条边。把顶点拆成两个u和u‘,那么其实就是做二分匹配,并且要求完美匹配,并且权值和最小。可以用最小费用流或者KM算法求解,用最小费用流的话直接按给出的图在拆开的两组点中建边,容

2014-01-23 16:01:45 9000

原创 hdu 4406 GPA(最大费用流)

题意:距离考试有n天,现在有m个科目要复习,每天能有k个复习时间单元,每用一个时间单元复习,就能让所复习的科目分数增加一分,在保证不挂科的情况下,让绩点尽量高……思路:这题除了费用的问题外,建图还是比较直观的,添加一个源点S和汇点T,每一天向T连一条容量为k,费用为0的弧,每个科目向对应能复习的天连一条容量为k,费用为0的弧,剩下就是S向科目连对应的弧。首先,为了保证不挂科,如果第i科

2014-01-23 13:01:43 742

原创 CF 383C Propagating tree(dfs序+线段树)

题意:给出一棵n个结点的树,每个结点有一个权值,有m个操作,一个是给x结点加上val,并且给x的子节点加上-val(这里有传递性,子节点还要给其子节点加上-(-val))。另一个操作是查询某个结点的值。思路:由于给结点加数的操作有传递性,可以传递给所有的子节点,所以我们可以通过dfs给每个节点编号,这样每个结点的子树都是一个区间,然后用线段树维护增加的值就行了。还有一个问题就是增加的值

2014-01-22 16:09:28 1115

原创 hdu 3472 HS BDC(混合欧拉路径)

题意:给出n个单词,一个单词的末尾字母和另一个单词的第一个字母相同,那么这两个单词就能连在一起,有的单词可以翻转,现在问能否把所有单词都连在一起并且每个单词使用一次且仅一次。思路:把26个字母看成顶点,把每个单词看成一条边,如此建图,那么这个题就变成了判断这个图是否存在欧拉通路。我们知道欧拉通路的判断方法,但这题依然存在这问题,那就是单词可以翻转,也就是说,这个图中不仅存在有向边,而且

2014-01-22 14:12:39 779

原创 CF 383B Volcanoes

题意:有一个n×n的棋盘,有m个位置是有障碍的,有一个人从(1,1)开始走,每次只能向下或向右走,他要走到(n,n),问到达(n,n)的最短距离,不能到达输出-1。思路:稍加分析就可以得出,从(1,1)到(n,n)走的步数是确定的:2n-2。所以,唯一的问题就剩下了这个人能否走到终点。由于n非常大,所以从n着手显然不是很明智,我们可以看到m只有10^5,因此,从m入手或许是个很好的方案,我们先

2014-01-21 22:38:01 871

原创 hdu 1890 Robotic Sort(伸展树)

题意:最开始给出n个数,现在要给n个数排序。。。排序的方法是找到第i个数的位置j,然后把区间[i,j]翻转,现在问你每次翻转的j的位置。思路:又是一道伸展树的题,发现写的三道伸展树都1A了,虽然调样例调了N久……首先把这n个数按大小重新编号1~n,然后把这个区间建一棵伸展树,伸展树维护区间最小值和区间元素个数,为了能实现翻转操作,再加一个标记……每次找到值最小的那个节点,把它旋转到根,

2014-01-20 19:00:12 795

原创 SGU 191 Exhibition (贪心+构造)

题意:这题题意好难理解……意思是说有两个公司A、B,他们要展览物品,但是A公司的展柜要放B公司的物品,B公司的展柜要放A公司物品。最开始只有一个空柜台,从指定的一个公司开始,轮流进行操作,可选的操作有两个:①选一个自己公司的空展柜放上对方公司的物品         ②选一个自己公司的空展柜,在这个展柜左边插入一个对方公司的空展柜,再在这个新插入的展柜左边插入一个空展柜并放上自己公司的物品。题中

2014-01-20 13:16:56 915

原创 zoj 3741 Eternal Reality(DP)

题意:以魔禁为背景的题~你是学院都市的一个学生,并且你是level L的能力者,现在要接连参加n场比赛,每场比赛你至少要到达level Ai才能得到一分,现在你有一个能增加自身等级的药,每次使用会让你在[i, i + X - 1]场比赛中level变成L+1,但是这个药有副作用,每次使用以后,在[i + X, i + X + Y - 1]场比赛等级会降为0,成为无能力者。。。每次副作用后才能再次使

2014-01-19 19:57:57 1049

原创 zoj 3745 Salary Increasing

题意:某老板要给员工涨薪,每次给工资在[l,r]范围的人涨c单位工资,问最后老板要付多少钱。思路:这题其实是到水题,放上来的原因是提醒自己认真看题…… 题里有个条件:ri <li+1  看到这个条件基本就做出来了,从这个条件发现区间是不重叠的,因此,直接暴力就可以了,用一个数组num[i]记录工资为i的员工的人数,每次涨薪操作后修改人数就行了。。。代码:#inclu

2014-01-19 19:45:00 1401

原创 zoj 3742 Bellywhite's Algorithm Homework

题意:给出一个无向图,n个点m条边,有一些操作:Q +  查询所有正边和        Q -   查询所有负边和         Q A  查询所有边和        C  X  把跟X邻接的边的权值取反。思路:这题还是蛮经典的,和hdu 4467 Graph挺像的。就是把顶点度数大于sqrt(m)的点单独拿出来处理,其他的点直接暴力修改。用两个值存所有正边和所有负边的和,修改特殊点的时候,

2014-01-19 19:38:07 987

原创 poj 1679 The Unique MST(判断最小生成树是否唯一)

题意:求最小生成树并判断是否唯一。思路:标记所有权值相同的边,然后求最小生成树,如果最小生成树中不包含标记的边,那么最小生成树是唯一的,否则,依次去掉这些边,然后再做最小生成树,判断权值是否和原来的相等。代码:#include#include#include#include#include#include#include#include#include

2014-01-19 13:22:27 688

原创 poj 2117 Electricity(求割项)

题意:给出一个图,现在要删掉一个点,要求令连通块的数目尽量多,求最后连通块的数量。思路:要删除点,那么最好的方法就是删除割点,删除割点连通块至少会增加一个,那么删除哪个割点好呢,自然是选择删掉这个点能增加的最大的那个,这个可以用tarjan的时候算出来。然后加上原来的连通块的个数就是答案了 。代码:#include#include#include#incl

2014-01-19 12:21:57 675

原创 poj 3273 Tree(树链剖分)

题意:给出一棵n个结点的树,有三个操作:把第i条边的权值改为v,把a到b路径上的边的权值取反,求a到b的路径上边的权值最大值。思路:这题除了比较麻烦一点外,就是个裸的树链剖分。用线段树维护链的时候维护最小值,最大值,还有个取反标记就行了,取反的话最大值等于负的最小值,最小值等于负的最大值……由于一些2B错误改了半天才过。。。唉代码:#include#include#

2014-01-19 00:00:01 629

原创 poj 1438 One-way Traffic(双连通分量)

题意:给出一个n个顶点的图,图中的边有些是有向的,有些是无向的,已知在图中从任意一个顶点出发能到达任意一个顶点,现在要尽量把无向边改成有向边,并且还保证前面的性质。给出任意一组方案。思路:这题跟poj1515蛮像的。。。先把图当做无向的,然后tarjan求桥,此时的桥一定是双向的,并且这条双向边不能修改成单向边。剩下的就是各双连通分量中的双向边,由题中给出的条件可以知道,这些边一定是可

2014-01-18 19:31:46 904

原创 UVA 11922 Permutation Transformer && SGU 187. Twist and whirl - want to cheat(伸展树)

题意:最开始有个序列{1,2,3,……,n},有m个操作,每个操作要把[a,b]这个区间翻转,然后添加到序列尾部。最后输出最终序列。思路:伸展树第二题。。感觉对伸展树明白了一些,就是各种操作写的时候容易写错啊,转来转去有些晕。实现翻转可以把第a-1个元素旋转到根,把b+1旋转到根的右结点,此时b+1的左结点即为所要操作的区间,首先把这个子树删掉,翻转可以加个标记,表示这个区间被翻转过,然后把序

2014-01-18 16:37:44 818

原创 poj 3468 A Simple Problem with Integers(伸展树)

题意:给n个数,有两种操作,一种是查询区间和,另一种是在区间上每一个数加上v。思路:本来线段树是非常好写的,但是为了学习伸展树练练手,就写了个伸展树。第一次写,代码基本上是抄的cxlove的Orz……http://blog.csdn.net/acm_cxlove/article/details/7815019代码:#include#include#inclu

2014-01-18 16:27:18 851

原创 poj 3728 The merchant(tarjan求lca)

题意:给出一个n个节点的树,树上的每个节点都有某个价值的货物,有q次询问,每次询问从u到v的路径上能获得的最大利润(只买一次卖一次)思路:最开始以为从u到v和从v到u都行,结果样例都过不了……其实可以考虑下uv顺序无关的情况,这种情况下,我们只要知道这条路径中货物价值的最大值和最小值,然后把它们相减就能得到答案了,如果这么对于每个节点我们知道知道三个值就能在用并查集合并的时候解决了:从u到当前

2014-01-17 21:50:12 684

原创 SGU 190 Dominoes(二分图匹配)

题意:给出一个n×n的棋盘,现在挖掉p个格子,问剩下的空位能否用1×2的Dominoes填满,小矩形不能覆盖。输出方案。思路:如果两个相邻的格子能放Dominoes,那么就在它们之间连一条边,很容易看出这是一个二分图,接下来只要做个最大匹配,看最大匹配数是否是空着的格子的一半就行了。代码:#include #include#include#include#inc

2014-01-17 11:55:34 844

原创 poj 2763 Housewife Wind(树链剖分)

题意:给出一个n个节点的树,每次询问树上路径长度,或者修改某条边的长度。思路:典型的树链剖分,但是我又写了好久。。。唉,还是代码能力不够啊,每次写都要写出好多bug……代码:#include#include#include#include#include#include#include#include#include#include#include

2014-01-16 21:06:57 669

原创 poj 3177 Redundant Paths(双连通分量)

题意:给出一个无向图,要求添加最少的边令整个图双连通。思路:求双连通分量,然后缩点,统计度数,最后直接算一下要连的边的个数……这种题也做过好几个了,感觉挺好做了代码:#include#include#include#include#include#include#include#include#include#include#include#def

2014-01-16 17:28:31 592

原创 poj 1515 Street Directions(双连通分量)

题意:给出一个连通图,边是双向边,要求令尽可能多的双向边改成单向边,并且图还是连通的(强连通)。思路:这题其实不太难搞。我们可以想一下,那些边是一定不能改造的?没错,是桥,如果桥被改成单向边,那么就不可能强连通,另外,对于一个双连通分量来说,一定可以把它们的边改成单向并且还是连通的。这样,算法就比较明确了,对于桥来说,不能改造,对于一个双连通分量来说,改造它的所有边。如何改造双连通分量中的边?

2014-01-16 16:03:03 658

原创 SGU 176 Flow construction(有源有汇上下界最小流)

题意:求从1到N的最小流,有些边必须满流。思路:满流的看做下界和上界相同。。。首先要判断一下是否有可行流,这个比较简单,然后是最小流,图论书上的做法一般是从N到1做一遍最大流,通过这个操作来得到最小流,但是对于这个题并不完全适用,这道题有些管道可以形成环,并且一开始就有流量,因此,使用上面的方法可能会破坏环从而使流量变大,如果有这种情况发生,就说明这个网络的最小流是可以为0的,因此,如

2014-01-16 13:34:48 899

原创 poj 2112 Optimal Milking(二分+最大流)

题意:有K个挤奶器和C头奶牛,没台挤奶器最多能让M头奶牛挤奶,奶牛到挤奶器需要走一段路程,安排每头奶牛到一台挤奶器挤奶,令所有奶牛中要走的最大距离最小。思路:比较明显的最大流,最大距离最小只要二分就行了。另外,可以先用floyd处理下两点之间的最短路……代码:#include#include#include#include#include#includ

2014-01-15 18:14:20 716

原创 SGU 160 Magic Multiplying Machine(dp)

题意:给出n个数,再给一个m,从这n个数中挑一些数,所得的分为这些数的乘积对m取模,不取数时得分为1。思路:这题其实跟背包差不多嘛,枚举n个数,看能否构成0~m-1中的数,正常背包来说应该是从m-1到0更新,但这题要乘积以后取模,这使得更新的顺序没什么区别,当然,直接更新会出出现一些问题,但正好这题要记录路径,那么我dp[i]记录的就是i这个数是从哪一个数乘过来的,如果是自己那么是-2,如果得

2014-01-15 15:58:34 785

原创 SGU 151 Construct a triangle(数学)

思路:把A点固定在(0,0),B点固定在(c,0),然后设C点为(x,y),这样很容易得到两个方程:                x^2+y^2=b^2           (x+c)^2+y^2=4m^2            这个方程组非常好解,很容易就能得到x,y。不过还有些小问题,第一个是这题ABC三点可以共线(感觉不能理解),另一个就是输出-0.00000会Pe……剩下就没什么问题

2014-01-15 14:53:51 833

原创 SGU 141 Jumping Joe(扩展欧几里得)

题意:一只青蛙在坐标轴的原点,它每次可以向左或向右跳x1或x2的距离,现在,它想跳K次恰好跳到P点,求一个跳的方案,P1为向右跳x1的次数,N1为向左跳x1的次数,P2为向右条x2的次数,P3为向左跳x2的次数。思路:唉,对数论什么的一直没感觉啊,做了半天好不容易做出来了……首先是求一个可行解,这个简单,相当于解ax+by=c的方程,直接用扩展欧几里得就可以搞定,这里求出的x和y分别相当于P1

2014-01-14 18:09:19 1003

原创 UVALive 4726 Average(数形结合)

题意:给出一个01串,选一个长度至少为L的子序列使得子序列数字的平均值最大。思路:为了这题又看了个论文……是04年国家集训队 周源的《浅谈数形结合思想在信息学竞赛中的应用》,感觉这样不行啊,有时间要好好看看这些论文,不能碰到一道题再去看。其实这个平均值在坐标中画出来就相当于斜率,从而转化成寻找两点之间最大斜率的问题,维护一个下凹的图形序列就行了。感觉我写的有些丑啊,最后调了半天发现初始化错了O

2014-01-13 17:24:29 936

C#打字小游戏

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

2012-04-15

空空如也

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

TA关注的人

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