08 2013 档案

摘要:比赛时,开了大号去做,算了半天发现不会做A,囧。于是跑去看B,发现很水?于是很快敲完了,但是A不会,没敢交。于是去看C,一直找规律啊,后来总算调了出来,看了一下榜,发现还是算了吧,直接去睡觉了。第二天一起床把代码一交,居然A了,发现交的话rating还能涨一点,囧。B:其实就是求一个最长不下降子序列的长度。注意到数据范围,使用二分的方式求解。#include #include #include #include #include #include #include #include #include #include #include #include using namespace st.. 阅读全文
posted @ 2013-08-31 19:46 yejinru 阅读(328) 评论(0) 推荐(0) 编辑
摘要:1.随机选两个堆v,u,询问若在v到u间的路径上的石子堆中玩Nim游戏,是否有必胜策略,如果有,vfleaking将会考虑将这些石子堆作为初始局面之一,用来坑玩家。2.把堆v中的石子数变为k。分析:NIM游戏这有介绍。 题目简单描述:修改节点权值,询问路径异或和。 这个不就是dfs序维护树状数组吗? 以下借用niuox学长的一幅dfs序的图 所以答案就是ask(st[x]) ^ ask(st[y]) ^ a[lca(x,y)] (lca(x,y)节点到根节点路径上所有的点值异或两次后值为0,所以需要异或一次lca(x,y))。求lca直接倍增即可。 由于直接dfs会爆栈,所以需要... 阅读全文
posted @ 2013-08-31 19:24 yejinru 阅读(388) 评论(0) 推荐(0) 编辑
摘要:1040: [ZJOI2008]骑士Time Limit:10 SecMemory Limit:162 MBSubmit:1190Solved:465[Submit][Status]DescriptionZ国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各界的赞扬。最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队。于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶。骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往 阅读全文
posted @ 2013-08-31 15:44 yejinru 阅读(383) 评论(0) 推荐(0) 编辑
摘要:GSS7Can you answer these queries IV题目:给出一个数列,原数列和值不超过1e18,有两种操作:0 x y:修改区间[x,y]所有数开方后向下调整至最近的整数1 x y:询问区间[x,y]的和分析: 昨天初看时没什么想法,于是留了个坑。终于在今天补上了。 既然给出了1e18这个条件,那么有什么用呢?于是想到了今年多校一题线段树区间操作时,根据一些性质能直接下沉到每个节点,这里可以吗?考虑1e18开方6次就下降到1了,因此每个节点最多被修改6次。于是我们每个节点(区间)记录一个该区间的最大值,每次修改时,先判断该区间是否最大的数已经等于1,等于的话,就不用继续.. 阅读全文
posted @ 2013-08-29 13:04 yejinru 阅读(271) 评论(0) 推荐(0) 编辑
摘要:树链剖分可以看成是树的边分治,什么是点分治呢?CF322E -Ciel the Commander题目:给出一棵树,对于每个节点有一个等级(A-Z,A最高),如果两个不同的节点有相同等级的父节点(节点不一定相同),则两个节点的路径上最少有一个比他们两的等级都高的节点。要求输出1~n的等级。分析:考虑一条链的情况,如果把A放中间,把数列分成两段,对于每一段,中间放B,这样分成了四段,对于每一段继续这样分,显然26个字母可以安放2^26个位置。 对于树这种结构的话,如何安放? 类似于一条链的情况,根放A,然后分成的每一条子链中间放B。。。 但是怎么知道中间的B在哪呢? 不妨考虑树的点分治,... 阅读全文
posted @ 2013-08-29 09:41 yejinru 阅读(340) 评论(0) 推荐(0) 编辑
摘要:Query on a tree again!给出一棵树,树节点的颜色初始时为白色,有两种操作:0.把节点x的颜色置反(黑变白,白变黑)。1.询问节点1到节点x的路径上第一个黑色节点的编号。分析:先树链剖分,线段树节点维护深度最浅的节点编号。注意到,如果以节点1为树根时,显然每条重链在一个区间,并且区间的左端会出现在深度浅的地方。所以每次查找时发现左区间有的话,直接更新答案。99291512013-08-28 10:45:55Query on a tree again!100 editrun12.5427MC++4.3.2#include #include #include #include # 阅读全文
posted @ 2013-08-28 16:53 yejinru 阅读(651) 评论(0) 推荐(0) 编辑
摘要:GSS7Can you answerthese queries VII给出一棵树,树的节点有权值,有两种操作:1.询问节点x,y的路径上最大子段和,可以为空2.把节点x,y的路径上所有节点的权值置为c分析:修改树路径的信息,可以考虑一下树链剖分、动态树。这题可以用树链剖分的方式来做,不会的可以看看这篇树链剖分---模板。其实树链剖分不难理解,一小时左右就能学会了。对于在一段区间的最大子段和问题,可以参考GSS1 spoj 1043 Can you answer these queries I 最大子段和由于x,y可能不在同一个重链上,所以在询问时需要分两段进行统计,合并的时候跟GSS1基本一样 阅读全文
posted @ 2013-08-28 11:30 yejinru 阅读(528) 评论(0) 推荐(0) 编辑
摘要:GSS6Can you answer these queries VI给出一个数列,有以下四种操作:I x y: 在位置x插入y。D x : 删除位置x上的元素。R x y: 把位置x用y取替。Q x y: 输出区间[x,y]的最大字段和。分析:其实这题是BZOJ 1500 [NOI2005]维修数列这题的简化版。使用splay来做非常简单。我的做法增加一个虚拟节点在数列的最开始处,增加两个虚拟节点在最后,这是为了方便在数列最后插入的操作。splay网上的资料比较多,其实splay比sbt、avl都简单。这里有我的一份总结,并且有一些资料:splay总结囧,我写的splay太慢了,最后上网搜了 阅读全文
posted @ 2013-08-28 09:31 yejinru 阅读(355) 评论(0) 推荐(0) 编辑
摘要:gss5Can you answer these queries V给出数列a1...an,询问时给出:Query(x1,y1,x2,y2) = Max { A[i]+A[i+1]+...+A[j] ; x1 =x2: 考虑x1与x2的关系: 如果x1==x2,最大值可能出现在区间[x1,y1]的最大子段和,[x1,y1]的右区间连续最大和加上[y1+1,y2]的左区间连续最大和。 否则,考虑三个区间[x1,x2-1],[x2,y1],[y1+1,y2],这时考虑方式跟上面差不多,就不写出来了,具体可以看代码。#include #include #include #incl... 阅读全文
posted @ 2013-08-27 21:44 yejinru 阅读(333) 评论(0) 推荐(0) 编辑
摘要:gss2调了一下午,至今还在wa。。。我的做法是:对于询问按右区间排序,利用splay记录最右的位置。对于重复出现的,在splay中删掉之前出现的位置所在的节点,然后在splay中插入新的节点。对于没有出现过的,直接插入。询问时直接统计区间的最大子段和。gss2没能调出bug,所以看了一下以下的gss3,发现跟gss1基本一样。直接上代码以上的做法是错的,对于这种数据就过不了。姿势不对,囧44 -2 3 -211 4GSSCan you answer these queries III题目:给出一个数列,有两种操作:0.把第x项变为y1.询问区间[l,r]的最大子段和分析:线段树简单区间操作。 阅读全文
posted @ 2013-08-27 20:03 yejinru 阅读(246) 评论(0) 推荐(0) 编辑
摘要:今天下午不知道要做什么,那就把gss系列的线段树刷一下吧。Can you answer these queries I题目:给出一个数列,询问区间[l,r]的最大子段和分析: 线段树简单区间操作。 线段树中记录lx,rx,mx,分别表示:最大前驱连续和,最大后继连续和,区间最大子段和。 在合并时时只需要合并两个区间即可,具体可以看代码的Union。 从队友jingo那里学到了这种合并的写法,发现比网上大部分代码简单很多。#include #include #include #include #include #include #include #include #include #includ 阅读全文
posted @ 2013-08-27 15:07 yejinru 阅读(307) 评论(3) 推荐(0) 编辑
摘要:开了个小号做,C题一开始看错范围,D题看了半小时才看懂,居然也升到了div1,囧。C - Xenia and Weights给出一串字符串,第i位如果是1的话,表示有重量为i的砝码,如果有该种砝码的话,数量有无限多个。现在往天平的两侧放入,每次放入的要求:1.每次放入时和上次放入的砝码的重量不能一样。2.放入的那端天平必须必另一端重。问能否放入n次,能的话,求放入方式。分析: 比赛时看到很多人写的是贪心,但是想不到有什么好的数据叉掉他们,囧。 我写的是直接dfs爆搜。代码略吧。D - Xenia and Bit Operations这题挺有意思的。只不过比赛时纠结了半个小时的题意,看懂了之.. 阅读全文
posted @ 2013-08-27 02:03 yejinru 阅读(332) 评论(0) 推荐(0) 编辑
摘要:题目:给出一个图,从图中找出两条最短路,使得边不重复。分析:既然是最短路,那么,两条路径上的所有节点的入边(s,x)、出边(x,e)必定是最优的,即 dis[x] = dis[s]+edge_dis,dis[e] = dis[x]+edge_dis。 dis表示点x到节点1的最短路的距离。 所以建图时,先求一边最短路,根据最短路上的前驱(可能有多个)与该节点构成新图,对于新图求一遍最大流判断最大流是否大于等于2即可。 /*题目:给出一个图,从图中找出两条最短路,使得边不重复。分析:先求一遍最短路,最短路上的点可以构成一个新图,对于新图求一遍最大流,如果存在大于1的最大流,则有解。*/#... 阅读全文
posted @ 2013-08-26 13:39 yejinru 阅读(297) 评论(0) 推荐(0) 编辑
摘要:208E - Blood Cousins题目:给出一棵树,问与节点v的第k个祖先相同的节点数有多少个。分析: 寻找节点v的第k个祖先,这不就是qtree2简化版吗,但是怎么统计该祖先拥有多少个深度为k的儿子? 我们可以对于深度为d的所有节点放到一个数组中,这时需要知道的是深度为d的数组中某个连续区间都属于该子树的长度。 某棵子树的信息?这时可以考虑一下dfs序列。。。 dfs序列把整棵子树放在同一个区间,不懂dfs序的可以做做这两题: BZOJ 1103 [POI2007]大都市meg,BZOJ 1782 [Usaco2010 Feb]slowdown 慢慢游。 于是,我们df... 阅读全文
posted @ 2013-08-26 11:33 yejinru 阅读(604) 评论(0) 推荐(0) 编辑
摘要:QTREE2经典的倍增思想题目:给出一棵树,求:1.两点之间距离。2.从节点x到节点y最短路径上第k个节点的编号。分析: 第一问的话,随便以一个节点为根,求得其他节点到根的距离,然后对于每个询问(x,y),想求得lca(x,y),直接用dis[x]+dis[y]-2*dis[ lca(x,y) ]即可。 第二问的话,可以用倍增的方式求。我们通过求得节点x,y,lca(x,y)的深度,判断第k个节点落在哪个链上,该链是指是从x到根或者从y到根。最后倍增可以轻松求出一个链上第k个父亲是谁了。 我实现的时候,lca以及求某个节点的第k个祖先都是用倍增的思想实现。#include #incl... 阅读全文
posted @ 2013-08-25 21:17 yejinru 阅读(480) 评论(0) 推荐(0) 编辑
摘要:1146: [CTSC2008]网络管理NetworkTime Limit:50 SecMemory Limit:162 MBSubmit:870Solved:299[Submit][Status]DescriptionM公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门。为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络。该网络的结构由N个路由器和N-1条高速光缆组成。每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,然后再通过这个通信子网与其他部门进行通信联络。该网络结构保证网络中的任意两个路由器之间都存在一条直接或间接路 阅读全文
posted @ 2013-08-25 12:58 yejinru 阅读(501) 评论(0) 推荐(0) 编辑
摘要:1036: [ZJOI2008]树的统计CountTime Limit:10 SecMemory Limit:162 MBSubmit:3427Solved:1429[Submit][Status]Description一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v本身Input输入的第一行为一个 阅读全文
posted @ 2013-08-24 18:09 yejinru 阅读(418) 评论(0) 推荐(0) 编辑
摘要:《树链剖分及其应用》一文讲得非常清楚,我一早上就把他学会了并且A了这题的入门题。spojQTREE题目:给出一棵树,有两种操作:1.修改一条边的边权。2.询问节点a到b的最大边权。直接粘代码。更成熟的代码可以看下一篇BZOJ 1036: [ZJOI2008]树的统计Count#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsig 阅读全文
posted @ 2013-08-24 12:26 yejinru 阅读(394) 评论(0) 推荐(0) 编辑
摘要:BZOJ2876[Noi2012]骑行川藏在约束∑(K_i*S_i*(V_i-V_i')^2<=Eu下,求∑S_i/V_i的最大值拉格朗日乘数法。具体百度。。。BZOJ1053[HAOI2007]反素数ant求反素数分析:根据乘法原理,n的因子数为(p1+1)*(p2+1)*...所以可以使用递归的形式找到不大于n的反素数,另外想要使得数目最多,所以必须使得素数因子最小的数目最多(可增加一剪枝使得搜索更快)。sgu126Boxes有两个箱子,分别有a,b个球,现在从一个箱子往另一个箱子移动球,每次移动只能够是另一个箱子球的个数,问能不能够使得其中一个箱子空。分析:我们可以从(0, 阅读全文
posted @ 2013-08-13 10:29 yejinru 阅读(594) 评论(0) 推荐(0) 编辑