随笔分类 - 树
摘要:题目1 : 焦距时间限制:2000ms单点时限:1000ms内存限制:256MB描述一般来说,我们采用针孔相机模型,也就是认为它用到的是小孔成像原理。在相机坐标系下,一般来说,我们用到的单位长度,不是“米”这样的国际单位,而是相邻像素的长度。而焦距在相机坐标系中的大小,是在图像处理领域的一个非常重要...
阅读全文
摘要:题目:zdf给出的题目翻译:从前有一个富饶的国度,在这里人们可以进行自由的交易。这个国度形成一个n个点的无向图,每个点表示一个城市,并且有一个权值w[i],表示这个城市出售或收购这个权值的物品。又到了一年一次团圆的日子,所有外出打工的人都急忙赶着回家。现在有m个人,给出每个人的工作地点和家的编号,让你求出每个人在回家的路上通过倒卖物品获得的最大收益,因为要急忙赶着回家,所以他们一定会选择最短的路程,并且只进行一次倒卖(即最多买一次、卖一次)。分析: 与倍增求lca相似,额外记录四个值: dmax[x][i]:从x的第2^i父亲到该节点的节点最大权值 dmin[x][i]:从x的第2^i父...
阅读全文
摘要:Water Tree给出一棵树,有三种操作:1 x:把以x为子树的节点全部置为12 x:把x以及他的所有祖先全部置为03 x:询问节点x的值分析: 昨晚看完题,马上想到直接树链剖分,在记录时间戳时需要记录一下出去时的时间戳,然后就是很裸很裸的树链剖分了。 稳稳的黄名节奏,因为一点私事所以没做导致延迟了 (ps:后来想了一下,不用树链剖分直接dfs序维护也行。。。)#include #include #include #include #include #include #include #include #include #include #include #include usin...
阅读全文
摘要:题目:给出一棵树,每棵树的节点有权值,现在有m组询问,在线询问以节点x为根,高度为y的所有子节点的最大权值。这题是我今早在做HDU 4601时,由于思路错了,稍微改动了一下题目,得到这个简单版,不知道有没有出现过原题。分析: 由于必须在线,离线的做法不可取。 询问的是以节点x为根的子树的节点信息,因此考虑一下dfs序。在dfs时,我们用数组d[i]记录第i层的节点。那么,在一棵子树下相同高度的节点必然连续出现在数组d[i]中。对于n个节点按d[i]重新编号,并且把值也在新编号的位子上,记录相应的hash值(hash[新编号] = 旧编号)。 构造线段树,维护一下新的编号。 这时,以节点...
阅读全文
摘要:发现今天没怎么做题,于是随便写了今天杭电热身赛的一题。题目:给出一棵树,删边和添边的费用都是1,问如何删掉一些树边添加一些树边,使得树变成一个环。分析:统计树的分支数。大概有两种做法:1.直接dfs,由底向上统计,对于叶子节点,返回1。对于父节点,统计子节点的返回值的和(sum),如果大于1,说明存在两个子链或以上,所以这里需要sum-1个分支,返回0。如果小于等于1,返回1。画个图就知道了。。。图中发现:节点返回值和为sum>1时,需要sum-1个分支。某节点返回值和sum=3,则需要2个分支;一个返回值和为sum=2,则需要1个;如果返回值为1,说明可以跟上面某个父节点组成一条链。加
阅读全文
摘要:今天再做一天树的题目,明天要开始专攻图论了。做图论十几天之后再把字符串搞搞,区域赛前再把计几看看。3083: 遥远的国度Time Limit:10 SecMemory Limit:128 MBSubmit:400Solved:89[Submit][Status]Description描述zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。问题是这样的:遥远的国度有n个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个
阅读全文
摘要:支持:1.添加边 x,y2.删边 x,y3.对于路径x,y上的所有节点的值加上w4.询问路径x,y上的所有节点的最大权值分析:裸的lct...rev忘了清零死循环了两小时。。。1:就是link操作2:就是cut操作3:维护多一个mx域,mx[x]表示在splay中以节点x为根的子树的最大点权,每次修改时,把x置为splay的根,打通y到x的路径,把y splay到根,那么,直接对y节点的lazy标记加上为w即可。4:同3操作,把x置为splay的根,打通y到x的路径,把y splay到根,那么,y子树所对应的节点就是路径x到y的所有节点。另外,题目貌似描述有点问题,不光是询问非法输出-1,是指
阅读全文
摘要:[Usaco2010 Mar]gather 奶牛大集会Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在 N(1#include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsigned long long ull;#define debug puts("here&
阅读全文
摘要: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会爆栈,所以需要...
阅读全文
摘要:1040: [ZJOI2008]骑士Time Limit:10 SecMemory Limit:162 MBSubmit:1190Solved:465[Submit][Status]DescriptionZ国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英。他们劫富济贫,惩恶扬善,受到社会各界的赞扬。最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争。战火绵延五百里,在和平环境中安逸了数百年的Z国又怎能抵挡的住Y国的军队。于是人们把所有的希望都寄托在了骑士团的身上,就像期待有一个真龙天子的降生,带领正义打败邪恶。骑士团是肯定具有打败邪恶势力的能力的,但是骑士们互相之间往往
阅读全文
摘要:GSS7Can you answer these queries IV题目:给出一个数列,原数列和值不超过1e18,有两种操作:0 x y:修改区间[x,y]所有数开方后向下调整至最近的整数1 x y:询问区间[x,y]的和分析: 昨天初看时没什么想法,于是留了个坑。终于在今天补上了。 既然给出了1e18这个条件,那么有什么用呢?于是想到了今年多校一题线段树区间操作时,根据一些性质能直接下沉到每个节点,这里可以吗?考虑1e18开方6次就下降到1了,因此每个节点最多被修改6次。于是我们每个节点(区间)记录一个该区间的最大值,每次修改时,先判断该区间是否最大的数已经等于1,等于的话,就不用继续..
阅读全文
摘要:树链剖分可以看成是树的边分治,什么是点分治呢?CF322E -Ciel the Commander题目:给出一棵树,对于每个节点有一个等级(A-Z,A最高),如果两个不同的节点有相同等级的父节点(节点不一定相同),则两个节点的路径上最少有一个比他们两的等级都高的节点。要求输出1~n的等级。分析:考虑一条链的情况,如果把A放中间,把数列分成两段,对于每一段,中间放B,这样分成了四段,对于每一段继续这样分,显然26个字母可以安放2^26个位置。 对于树这种结构的话,如何安放? 类似于一条链的情况,根放A,然后分成的每一条子链中间放B。。。 但是怎么知道中间的B在哪呢? 不妨考虑树的点分治,...
阅读全文
摘要: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 #
阅读全文
摘要:GSS7Can you answerthese queries VII给出一棵树,树的节点有权值,有两种操作:1.询问节点x,y的路径上最大子段和,可以为空2.把节点x,y的路径上所有节点的权值置为c分析:修改树路径的信息,可以考虑一下树链剖分、动态树。这题可以用树链剖分的方式来做,不会的可以看看这篇树链剖分---模板。其实树链剖分不难理解,一小时左右就能学会了。对于在一段区间的最大子段和问题,可以参考GSS1 spoj 1043 Can you answer these queries I 最大子段和由于x,y可能不在同一个重链上,所以在询问时需要分两段进行统计,合并的时候跟GSS1基本一样
阅读全文
摘要:gss2调了一下午,至今还在wa。。。我的做法是:对于询问按右区间排序,利用splay记录最右的位置。对于重复出现的,在splay中删掉之前出现的位置所在的节点,然后在splay中插入新的节点。对于没有出现过的,直接插入。询问时直接统计区间的最大子段和。gss2没能调出bug,所以看了一下以下的gss3,发现跟gss1基本一样。直接上代码以上的做法是错的,对于这种数据就过不了。姿势不对,囧44 -2 3 -211 4GSSCan you answer these queries III题目:给出一个数列,有两种操作:0.把第x项变为y1.询问区间[l,r]的最大子段和分析:线段树简单区间操作。
阅读全文
摘要:208E - Blood Cousins题目:给出一棵树,问与节点v的第k个祖先相同的节点数有多少个。分析: 寻找节点v的第k个祖先,这不就是qtree2简化版吗,但是怎么统计该祖先拥有多少个深度为k的儿子? 我们可以对于深度为d的所有节点放到一个数组中,这时需要知道的是深度为d的数组中某个连续区间都属于该子树的长度。 某棵子树的信息?这时可以考虑一下dfs序列。。。 dfs序列把整棵子树放在同一个区间,不懂dfs序的可以做做这两题: BZOJ 1103 [POI2007]大都市meg,BZOJ 1782 [Usaco2010 Feb]slowdown 慢慢游。 于是,我们df...
阅读全文
摘要: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...
阅读全文
摘要:1146: [CTSC2008]网络管理NetworkTime Limit:50 SecMemory Limit:162 MBSubmit:870Solved:299[Submit][Status]DescriptionM公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门。为了让分布在世界各地的N个部门之间协同工作,公司搭建了一个连接整个公司的通信网络。该网络的结构由N个路由器和N-1条高速光缆组成。每个部门都有一个专属的路由器,部门局域网内的所有机器都联向这个路由器,然后再通过这个通信子网与其他部门进行通信联络。该网络结构保证网络中的任意两个路由器之间都存在一条直接或间接路
阅读全文
摘要: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输入的第一行为一个
阅读全文