自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(104)
  • 资源 (7)
  • 收藏
  • 关注

原创 HDU 4893(Wow! Such Sequence!)

题意:略;思路:很水的

2014-07-29 22:51:02 684

原创 HDU 4864(Task)

题意:略。思路:

2014-07-22 18:46:02 1014

原创 Codeforces 276E(Little Girl and Problem on Trees)

题意:给出一颗树,每次对树进行两种操作,第一种操作:给节点v及距离节点v,d个单位长度以内的节点加x   第二种操作:询问节点v当前的值。注意:给出的树中,除了节点1以为,其他节点的度都不会超过2。思路:刚开始逗比没看到上面那个条件,有了上面这个条件后可以发现,这种树肯定是节点1拖着很多直链的。看到别人的做法几乎都是开n颗线段树的,而我是用两颗线段树做的。首先,求出所有节点的深度(根节点深

2014-05-05 23:54:41 772

原创 HDU 4034(Graph)

题意:给出一个有向图两两顶点间的最短路,

2014-04-21 20:34:11 607

原创 HDU 4403(A very hard Aoshu problem)

唔...好久没写博客了,上大学久了,人也变懒了...不行,以后还是要坚持写。翻了翻OJ上提交了但是没有过的题目,对于我这种有强迫症的人来说,每多一道unsolved都会让我感觉很不舒服,然后随便找了道切了下做这题做之前还是要想清楚,因为这题做起来注意的细节稍微有点多,之前敲的dfs,感觉有点漏洞,然后想了想又换了二进制枚举。这题数据范围小,毫无疑问是枚举;感觉比较好的做法是枚举等号的位

2014-04-02 20:10:21 850

原创 BZOJ 1588(营业额统计)

题意:每输入一个数,找出最接近它的一个数。这题是比较裸的平衡树的题,可以用STL轻松解决,但是刚学了平衡树Treap,所以就练习下平衡树。第一次写平衡树,代码从LRJ的白书上和网上拼拼凑凑写出来了,感觉还挺好,真是名不虚传,平衡树太强大了。以前一直觉得平衡树有多难多复杂,多次尝试使劲学之后才发现,其实没有那么复杂-。-  代码封装得不够好,以后慢慢修改吧!#include #in

2013-12-21 19:37:52 1248

原创 Codeforces 282E(Sausage Maximization)

题意:给出一段序列,找出一个连续的前缀,一个连续的后缀,使这些数异或出来的值最大。除了前缀或后缀为空以外,前缀和后缀必须包含第一个和最后一个元素。就是序列a1,a2,a3...an,找出前缀[0,l],[r, n + 1],使这些数异或起来最大,其中r > l,a0和an+1假设它为0,就是说[0,0]表示前缀为空,[n+1,n+1]表示为后缀为空。思路:这题有点神,没做过类似的题感觉有点

2013-11-08 20:38:06 1329

原创 Codeforces 242E(XOR on Segment)

题意:给出一段序列,然后有两种操作,1.对区间[l,r]求和;2.对[l,r]里的每个数异或x;思路:比较明显的线段树,但是直接做不太好做,但是可以用二进制的方法考虑,对于区间求和,模拟下n个数的二进制加法可以发现,只要你知道第0位,第1位。。有多少个1,就能算出总和,所以在每个区间需要记录区间里有多少个数在二进制第i位有1,那么对于区间求和操作来说就是模拟二进制加法而已,对于区间异或x来说,

2013-11-06 11:54:02 1205

原创 LCA倍增算法(模板)

LCA在线倍增模板,模板对应HDU 2586#include #include #include #include #include #include #include #define pb push_back#define mp make_pair#define sz(x) ((int)(x).size())using namespace std;const

2013-10-23 23:08:45 4585 1

原创 最小生成树重要的性质及其证明

今天看书的时候终于看懂了一个证明,这个一直是我的薄弱的环节,虽然这个证明比较简单,但能看懂还是挺有用的。性质1:一个无向图G,如果它的的边权都不相同,那么它的最小生成树唯一;证明:假设T1,T2是G的两棵最小生成树,其边集为E(T1) = {e1,e2,...,en-1}且按边权值从小到大排序(ei >= ei-1),E(T2) = {f1,f2,...fn-1}且按边权值从小到大

2013-10-11 19:35:32 4831 3

原创 Codeforces 220B(Little Elephant and Array)

题意:给出一个长度为n的序列,然后给出m个区间询问,求区间内数字出现次数等于该数字的个数;思路:这题有很多种解法,之前用一种nsqrt(n)的暴力解法写过,这次用莫队算法再写一次,复杂度是(n+q)sqrt(n);#include #include #include #include #include using namespace std;const int N = 1

2013-10-06 19:34:47 1024

原创 一些常用的短模板

快速幂取模LL pow_mod(LL a, LL b, LL n) { LL res = 1; while(b){ if (b & 1) res = (res * a) % n; a = (a * a) % n; b >>= 1; } return res % n;}素数表

2013-10-05 18:59:17 544

原创 HDU 4750(Count The Pairs)

题意:今天南京网选的一道题,题意是给定一个边权都不一样的图,然后给出10W个询问,每个询问有个w,求图中任意两点路径中满足最大边中的最小边(瓶颈边)大于等于w的(s,t)对数,不懂的看下题理解下样例吧。思路:这题数据量有点大1W个点,50W条边,暴力不太可能;首先注意到题目给出的边权都不一样,那么有一个性质可以知道了,就是图的最小生成树是唯一的,然后再按kruskal的顺序合并边,每次合并边,

2013-09-21 19:05:26 1073

原创 HDU 2242(考研路茫茫——空调教室)

题意:有一个教室群,教室之间有空调管相连(原图连通),每个教室都有人,求断开一条空调管使之分开成两个教室群,并且使两个教师群的人数差值最小。思路:这题没什么难度吧。。思路都很明了(可能是看过标签的缘故吧0.0),求边双连通分量,缩点,然后进行树形dp计数求出答案即可,贴个代码,以后拿来当模板用吧。#include #include #include #include #

2013-09-16 21:48:24 756

原创 floyd求最小环

模板是求顶点大于2的最小环;小于等于2的就将g[i][i]赋值为0,并去掉i,j,k不能相等的判断就可以了,模板对应HDU 1599#include #include #include #include using namespace std;const int N = 110;int g[N][N], dis[N][N];int main(){ int T,

2013-09-13 20:17:05 1153

原创 最短路算法(Dijsktra + 优先队列)

模板,对应测试题HDU 2544#include #include #include #include #include #include #define pb push_back#define mp make_pair#define sz(x) ((int)(x).size())using namespace std;const int N = 1010;con

2013-09-08 01:35:37 1379

原创 Codeforces 208C(Police Station)

题意:给出一个无向图,边权都为1,居民们需要从顶点1走到顶点n,而且只走最短路;然后让你在1~n中选一个顶点放置警察局,如果一个顶点放置了警察局,那么和这个顶点相连的道路都是安全的;求让你选择一个顶点放置警察局,使所有最短路中含有安全道路的平均值最大;其实就是sum(每一条最短路中含有安全边的数量)/ 最短路数;不同最短路的意思是如果两条路径至少含有1条不同的边就是不相同,不懂就去看题目样例吧-

2013-09-03 23:17:55 1083

原创 POJ 3177(Redundant Paths)

题意:求最少加多少条边,使这个图不存在桥;思路:很明显的边双连通分量的题,首先求出图中的双连通分量,缩点,然后求出度数为1的点的总数,那么答案就是(sum+1)/2;为什么是(sum+1)/2呢,我的理解是:因为题目说当前图中任意两个顶点最少有一条路相连,那么不同的双连通分量间就只有一条路相连,因为当前u到v有一条路径,所以再给u和v间加多一条边,就可以使这两个点都至少有两条路径到达了。

2013-08-29 19:02:55 955

原创 Codeforces 296D/295B(Greg and Graph)

题意:一个有向图,给出每两点间的距离,然后再给出一个删点的序列X,然后求出在删掉Xi前任意两点间的最短路的总和,然后把Xi这个顶点删去,连同和它相连的边;思路:一道floyd的好题,这题可以倒着做,首先一开始是一个空图,然后往里面加删点序列X里面的点,顺序是删点序列X的逆序,然后每次求出加完点后最短路总和即可。#include #include #include #define LL

2013-08-24 08:50:24 1150

原创 HDU 4576(Robot)

题意:杭州邀请赛的一道题;有标记着1~n的环,初始时有个机器人在1的位置,有m个操作,每个操作是使机器人随机的顺时针或逆时针的走w步,求所有操作过后机器人停在区间[l,r]内的概率;思路:挺明显的概率dp,首先可以很直观的定义出状态dp[i][j],表示第j次操作后停留在第i位置的概率,转移方程是dp[(i + w) % n][j] = dp[i[j-1] * 0.5;dp[i-w][

2013-08-10 18:17:46 1282 1

原创 强连通分量Tarjan模板

模板对应POJ1236#include #include #include #include #include using namespace std;const int N = 110;int head[N], cnt, sum, visit[N];struct go{ int e, next;}edge[N * N];void addedge(int a, int

2013-08-03 21:38:36 731

原创 线段树求矩形并模板

#include #include #include #include #define lson(i) (idx << 1)#define rson(i) ((idx << 1) ^ 1)using namespace std;const int N = 1010;double y[N];struct segment{ double x, y1, y2; int fla

2013-08-03 11:13:13 631

原创 HDU 4614(Vases and Flowers)

题意:今天多校的一道题,给出一排连续的花盆,有两个操作,第一个操作是从x位置开始放d朵花到花盆里,输出放第一朵花和最后一朵花的位置,如果一朵花也不能放另外输出第二个操作是将区间[l,r]里的花扔掉,并输出扔掉多少朵花;思路:简单的线段树加二分,线段树需要实现的功能是区间替换和区间求和,然后对于第一个操作,每次二分出放第一朵花的位置和最后一朵花的位置。就是这么简单的一道题,比赛时思路都已有了

2013-07-25 23:47:41 1182 8

原创 HDU 3308(LCIS)

题意:动态修改查询区间最长连续上升序列,注意:是连续的。思路:线段树区间合并的经典题,做这题最重要的是要写好pushUp函数,写pushUp函数需要递推一下,题目是求连续最长的子序列,所以可以知道每个区间的最长子序列有三种情况:1.最长子序列在左子区间;2.最长子序列在右子区间;3.最长子序列由左子区间和右子区间组成;前面两种情况直接更新到上一层即可,第三种情况则需将左子区间和右子区间合并,每

2013-07-17 21:31:04 768

原创 Codeforces 292E(Copying Data)

题意:给出两个数组A,B,每次操作从将从A数组第x个位置开始的k个元素复制到B数组第y个位置(覆盖B数组的k个元素),然后询问B数组的某个下标的值思路:普通的线段树,实现区间修改,单点查询就行了,线段树结点储存A数组在这区间的开始结束位置#include #include #include #include #include #include #include #includ

2013-07-12 14:43:01 727

原创 POJ 2828(Buy Tickets)

题意:有n个人在排队,编号为1~n,他们都要想插队,每个人有自己想要排的位置(想排第几个人的后面)和自己的编号,求最终每个人的位置。思路:这题思路是最重要的,至于怎样实现有很多种方法;这题可以变为从最后一个人开始往前算,因为这样算出来就是最终位置了,然后问题就可以转化为每个人排第几个空位了。。这样就可以用线段树或树状数组实现了,我用了三种方法实现,第一种是自己想的,也是最挫的,第二第三种是

2013-07-07 19:40:06 524

原创 POJ 3368(Frequent values)

题意:给出一串非下降数字,然后给出若干个询问区间,求区间内数字出现最多的次数。思路:lrj白书上的一道不错的RMQ题,看了书的分析然后顺手切了下,解决这道题可以抓住数列非下降这个条件,也就是每个数字都有他的出现区间。我们用数组L[i],R[i]分别记录第i个数字最先出现和最后出现的位置。用数组cnt[i]来记录第i个数字出现的次数,然后对cnt数组(其实是maxArr[i][0])进行RMQ;

2013-07-01 20:03:11 733

原创 UVA 11991

题意:lrj白书上的一道题,给出一串数字,求第k个v出现时的下标;思路:用STL里的map和vector轻松的解决。。#include #include #include #include #include #include #include #include #include #include #include #include #define LL long l

2013-06-29 22:20:37 591

原创 Codeforces 292D

题意:一个无向图,给出m条边,有k次询问,每次询问将第l到r条边暂时删去,求这时候有多少个连通分量。思路:非常不错的一个并查集的题目,刚开始不会做,看了看网上大牛的代码,发现这题并查集用得很巧妙,首先预处理,分别从前往后和从后往前合并,从前往后的并查集用s[i]表示,代表从第1条边到第i条边的并查集,从后往前用e[i]表示,代表从第i条边到第m条边的并查集;每次询问,要将两个并查集合并

2013-06-01 14:08:38 1315

原创 二分图最大匹配模板

模板对应POJ 3041#include #include #include using namespace std;/*******************匈牙利算法求最大匹配*****************/const int N = 510;int uN, vN;//uN, vN为左右独立点集的数量 int g[N][N];int linker[N];bool

2013-05-22 17:27:40 1362

原创 2013年ACM广东省省赛个人总结

这次比赛是我第一场参加的正式比赛,其实也是我们队第一次参加正式比赛,这次我和活泼聪明的12级学妹,还有YY能力比较强的东神组队参赛;第一次参加ACM的正式比赛,还是挺兴奋的,因为可以和各个高校的队伍PK,还有可以体验一下其他学校的校园生活,接下来写个流水账记录下今年的省赛;       11号早上做着包车到暨大,然后步行加地铁来到了华农,首先是去到他们的招待所订房,我们学校的队伍还是比较多的,

2013-05-18 12:29:15 2185 1

原创 HDU 2151(Worm)

设置好状态之后转移就简单了,状态转移方程 dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1],i表示第i分钟,j表示在第几棵树#include #include #include using namespace std;const int N = 110;int dp[N][N];//times, postionint main

2013-05-09 23:57:39 697

原创 HDU 4540(威威猫系列故事——打地鼠)

非常容易的dp,状态设计和转移都非常明显#include #include #include #include using namespace std;int main(){ int n, k, num[50][50], dp[50][50]; while(~scanf("%d%d", &n, &k)){ int i, j, res = 1000000, l; mems

2013-05-09 23:53:53 1068

原创 树状数组

在书上看到了个求逆序数之类的题,之前用归并排序做过求逆序数的,看完书的讲解之后,知道了怎样用树状数组求逆序数,原理和统计求和类似;HDU 2492 统计 ai>aj>ak和ailow[i]表示a[i]前面有多少个数小于a[i],high[i]表示a[i]后面有多少个数个小于a[i]#include #include #define LL __int64using namesp

2013-05-08 17:48:19 586

原创 POJ 2186(Popular Cows)

题意:有n个奶牛,它们之间互相膜拜,并且如果A膜拜B,B膜拜C则,A也膜拜C,求有多少头奶牛被所有奶牛都膜拜;思路:强连通分量+缩点,刚学SCC,这题是书上的例题,顺手敲下熟悉下,用的是Kosaraju算法,这个算法比较明了;对于这个题目,先求出强连通分量的个数,如果强连通分量个数只有一个,就输出n,否则对其进行缩点,然后统计各点缩完点之后的度数,若缩完点后度数为0的点有1个,则答案就

2013-04-17 12:31:46 471

原创 HDU 4478(Where is the King)

题意:比较好懂,略。思路:看完题面第一反应就是用bfs,然后将每个点记录两个信息(到这点距离为奇数,为偶数),也可以理解为将点拆成两个,那么这样就可以将每个点都能访问两次;然后判断能不能最终到达,判断原点能否能到达的条件是:总时间t为偶数或dis[x][y][1] #include #include #include #include #include #include #

2013-04-14 20:14:02 616

原创 HDU 1565(方格取数)

第一道状态压缩dp,比较简单,做得也比较暴力,不过还挺适合入门,。。贴个代码纪念一下#include #include #include #include #include #define pub push_back#define LL __int64using namespace std;const int N = 25;const int M = 18000;int

2013-04-08 21:55:17 712

原创 Codeforces 148E(Porcelain)

题意:娇生惯养的公主总爱发脾气,她每一次发脾气都会摔坏一个价值val的瓷器,这些瓷器放在n个架子上,每个架子有ai个花瓶,她每次只摔架子最左或最右的瓶子,求这摔坏m个瓷器总和的最大价值;题目抽象:有N行数,每行有ai个数,每次只能从每行数的头尾取数,取后将其删除,然后就会产生新的头尾;求从这N行数中取M个数能取得的最大值;思路:观察下题目,先从一行入手,可以发现每一行取出来的数一定是连

2013-04-07 20:57:47 910

原创 POJ 1703(Find them, Catch them)

题意:比较好懂,略;思路:挺不错的一个并查集的题,这里需要记录每个人的敌人,和lrj黑书上的并查集专题那题有点像,就是敌人的敌人是朋友,用个数组记录下每个人的敌人就好了,也只需记录其中一个敌人即可,因为通过一个可以找到其他的,每次有更新信息D a b的时候就让a,enemy[b]和b,enemy[a]合并,因为他们肯定是一伙的,还要注意处理合并空集的情况;询问时,当a,b在同一集合时,他们是一

2013-03-27 10:53:22 591

原创 RMQ模板

模板对应POJ 3264#include #include #include #include #define N 50010using namespace std;int maxArr[N][16], minArr[N][16];int n, q, num[N];void Sparse_Table(){ int l = (int)(log((double)n) /

2013-03-18 20:02:16 1032

罗穗骞《后缀数组——处理字符串的有力工具》(有算法源码和解题源码)

后缀数组经典论文,学习后缀数组的必备资料。

2014-01-06

国家集训队动态规划整理

IOI国家集训队论文及文档动态规划选集,精选了各种类型的动态规划,并有详细的讲解。

2014-01-06

浅谈数位类统计问题

迄今为止,ACMer学习数位DP的最好资料之一

2013-10-01

Dancing Link X

Donald Knuth的强大Dancing Link X

2013-06-26

ACM吉林大学算法模板

ACM吉林大学算法模板,涵盖大部分算法。

2013-06-26

背包九讲(完整版)

经典的背包问题,大牛DD写的经典背包教材<<背包九讲>>

2013-06-26

空空如也

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

TA关注的人

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