![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
线段树
文章平均质量分 89
alpc_qleonardo
这个作者很懒,什么都没留下…
展开
-
CodeForces - 1261F Xor-Set(动态开点线段树 + dfs)
大致题意给你AAA、BBB两个集合,两个集合里面的数字是由很多个区间构成的。现在让你求∑i∈A,j∈Bi⊕j\sum_{i \in A,j \in B}i\oplus ji∈A,j∈B∑i⊕j其中同样的异或结果只计算一次。解法显然我们要按位来考虑,对于每一位考虑异或之后可以取的数值,然后对低位就会产生对应的贡献。具体来说,如果第ddd位可以取1,那么第ddd位下面的所有位不论结果取什...原创 2019-11-28 15:23:58 · 402 阅读 · 1 评论 -
第九次多校赛总结+CSU 1914+CSU 1921加强版解法
应该是2017年上半年的最后的一场多校赛了,真的挺想留下一个美好的回忆,但是无奈力不从心…… 从一开始就是,水题疯狂卡,然后题目做法没有弄清楚,就去敲模板……记得1921那题一开始没想清楚,先是打了一个树状数组,后来发现不对打了个线段树,最后发现直接暴力就可以过…… 水题过后就是一般的题目,然而不知道状态不好还是什么,很容易看出来的解法当时却没有想到,贪心和简单的数据结构的应用都没有做出来。还一直在抱怨原创题出的奇怪……其实这些都只能怪自己最近太水了。我承认是我的问题,数据结原创 2017-05-08 18:13:35 · 412 阅读 · 0 评论 -
HDU 4691 Front compression(后缀数组+线段树/ST表)
大致题意,就是把一些字符串压缩,如果第i个子串与第i-1个有前缀相同的,那么可以表示为 x string 的形式,即lcp长度加上不同部分。现在,问你这样子压缩之后和压缩之前各有多少个字符(空格和换行符也要算上)。 根据一个简单的定理,这个在求height数组的时候貌似有些资料提到过,lcp(i,j)=min(h[k] | i<k<=j),即排名第i和第j的两个后缀,他们的lcp为二者的左开右闭区间的height[Rank[]]数组的最小值。有N个这样的子串,我们只需要做N次这样的区间最小值即可。而求区间最原创 2018-03-01 20:38:04 · 338 阅读 · 0 评论 -
HDU 6194 String ACM/ICPC 2017 Shenyang Online(后缀数组+容斥原理+线段树/ST)
据说这题是另一道SPOJ的一道后缀自动机的弱化版,好腻害的样子……这里用后缀数组解。 大致题意,给你一个字符串,然后问你在这个字符串中,恰好出现k次的不同子串有多少个(可以相互重叠)。 首先明确所有后缀数组题目都很重要的一点,即所有子串都是某个后缀的前缀,大部分都可以转化为lcp的问题。然后我之前在POJ上做了一道题,没有写博客,是求一个字符串中最长的出现至少k次的子串的长度(POJ 3261)。这两道题目类似,在求至少k次的时候用的是同样的方法。 对于这个出原创 2018-03-03 10:52:36 · 280 阅读 · 0 评论 -
CodeForce 916E Jamie and Tree(线段树+分类讨论)
大致题意:给你一棵树,每个节点上面有一个权值。然后有三种询问:1、换根;2、把点x、y在现有树情况下的LCA的子树的所有点权增加一个值;3、求某个节点在现有树情况下的点权和。 很显然的一个线段树经典题目,首先求所有点的dfs序,然后根据dfs序建立线段树,可以动态维护子树的权值和。但是这题的关键在于换根。因为换根之后树的形态发生了改变,对应的子树情况也会发生改变,不能简单的用初始情况下的dfs序。但是我们显然也不能真的去换根。 我们现在重新考虑一下换根之后,对于2和3操作原创 2018-04-16 20:45:27 · 430 阅读 · 0 评论 -
计蒜客 2018 ICPC宁夏 Continuous Intervals(线段树)
大致题意:定义连续区间,即满足区间最大值与最小值之差加一恰好等于区间数字个数的区间,是连续区间。现在给你一个数列,问你这个数列的所有子区间中有多少个连续区间。对连续区间进行量化,有区间的max-min+1==cnt,其中cnt表示区间中数字的种类数。注意到,对于任意一个区间,恒有max-min+1>=cnt,我们对式子变形,有max-min-cnt>=-1。因此,如果我们维护每一个区间的max-min-cnt的最小值,当这个最小值为-1的时候,说明存在有连续区间,这个最小值出现的次数就是连续区间原创 2018-07-23 11:26:18 · 1584 阅读 · 0 评论 -
CodeForces 1000F One Occurrence( 离线处理+线段树解法)
大致题意:给你一个固定的数列a,然后q个询问,每个询问给出一个区间,问你区间内是否有恰好出现一次的数字,如果有输出任意一个,否则输出0。 这题主要方法就是仿照17年HDU多校有一道题的做法,HDU 6070。其实也只是用了其中的一个思想,也即用每一个数字把区间分段。对于每一个区间[1,r]中的最右边的一个数字i,我都可以记录一个pos[i],表示数字i在区间[1,r]中上一个出现的位置。这里最右边指的是,同一个数字i,可能在区间中出现多次,最后那次是我们想要的。求出了这个pos,我们可以发原创 2018-07-07 09:25:22 · 1125 阅读 · 0 评论 -
HDU 6315 2018HDU多校赛第二场 Naive Operations(线段树+树状数组)
大致题意:初始的时候给你序列bi,然后ai初始为0。现在又两种操作add l r 和query l r。add是把a中区间[l,r]加一,query是让你求∑⌊ai/bi⌋,即区间内ai数值除以bi向下取整。个人最擅长做的题系列~现场50min时A题O(∩_∩)O……首先说明一下,这里用普通的线段树维护区间和之后再去除法,什么通分什么的都不行。因为这里的次序是先向下取整再进行求和。所以得考虑用其他的方法。仔细观察,我们可以发现,只有当ai的数值增加了bi的时候,才会对最后的结果产生贡献。因此,我们完全可以利原创 2018-07-25 19:23:17 · 429 阅读 · 2 评论 -
牛客练习赛 29 E 位运算?位运算!(线段树)
要求让你实现支持以上要求的数据结构。本题的特点主要是这些操作都是区间的位运算。由于这里最多只有20位,而且每一次的左移和右移都是强制补齐到20位的左移和右移,所以我们可以考虑线段树维护每一位的情况。考虑线段树的每一个节点i,它对应的sum[j]表示对应区间中有多少个数字的第j位是1。当遇到区间的 或 或者 与 操作的时候,就可以按照位去操作。对于或操作,如果对应的位是1...原创 2018-10-21 14:39:23 · 227 阅读 · 0 评论 -
牛客练习赛31 F 瑟班守护者莎利雅与护教军(推导 + 线段树)
一道算是挺难想的线段树。需要维护两个数组,一个d和一个f。f的定义参见体题面,前后最大值中最小的,再与自己的d取一个大的。然后有三种操作,1是求f的和;2是求区间[l,r]中,有多少个f的数值大于给定的数字v;3是修改某一个位置的d的值,使其增加v。在这里,f随着d的数值而变化,但是这个变化的关系没有什么直观的联系。下面我们仔细考虑一下,这两个到底有什么关系。 ...原创 2018-11-17 16:52:35 · 304 阅读 · 0 评论 -
CodeForces 1110F Nearest Leaf(离线处理 + 线段树)
大致题意:给你一棵n个节点的带有边权的树,给你q个询问。每个询问给出一个点x和一个区间[l,r],问在dfs序在这个区间的点中,距离x最近的叶子节点距离x的距离是多少。首先,我们考虑,如果每个询问的点x都是根,那么我们每次寻找一个距离最近的叶子节点的距离,相当于在这个区间中找叶子节点的最小值。因此,很自然而然的,我们可以把根距离每个叶子节点的距离放到线段树里面,那么...原创 2019-02-09 15:54:56 · 457 阅读 · 0 评论 -
CodeForces 1114F Please, another Queries on Array?(线段树 + 状态压缩 + 数论)
大致题意:给你一长度为n的序列,和q个操作。一个是区间乘以某个数字,另一个是查询区间积的欧拉函数对1e9+7取模的结果。出了n和q,这里所有出现的数字都是小于300的。这里如果直接做,显然是不行的,因为欧拉函数虽然具有积性,但是并不能够取模,意味着不能直接保存区间积。同时,欧拉函数不具有完全积性,当gcd不为1的时候,不是直接相乘。但是这里有一个很重要的条件,即出现的每个数...原创 2019-02-13 11:15:28 · 313 阅读 · 0 评论 -
CodeForces 1140F Extending Set of Points(线段树 + 并查集 + DFS)
大致题意:每个时刻往集合S里面添加或者删除一个点,然后每个时刻输出集合E(S)的大小。所谓E(S)就是对S进行拓展,如果S中存在(x1,y1)(x2,y2)(x1,y2)那么把(x2,y1)加入集合,一直到不能新加入点为止。我们仔细分析这个点加入的条件,很容易可以发现,对于一个点(x,y),相当于把第x行和第y列给合并。最后的答案就是每个连通块内的行数与列数的乘积和。所以我...原创 2019-04-04 08:39:19 · 489 阅读 · 0 评论 -
CodeForces 1132G Greedy Subsequences(线段树 + LIS)
大致题意:求所有长度为K的连续子区间的最长上升子串长度。我们知道,朴素的LIS问题有O(nlogn)的解法,但是如果有很多个区间,显然也是做不了的。这里我们学习到了一种解决LIS问题的新姿势。我们考虑每一个数字a[i],令nxt[i]表示它右边第一个比它大的数字的位置。这样每一个节点要么只有一个nxt[i],要么没有nxt[i]。如果我们把每一个i与nxt[i]连一条边...原创 2019-04-11 10:20:50 · 324 阅读 · 0 评论 -
HDU 6521 Party(线段树 + 思维)
大致题意:有n个人,一开始相互不认识。他们要去参加party,每次参加的人是编号在区间[l,r]内的人。参加完一次party之后,这区间内的人就会相互认识。现在问你,每次参加party的时候,有多少对人会新认识。首先,在参加这么多次party的过程中,每个人认识的人的编号显然是一个连续的区间。于是,我们就可以用L[i]和R[i]表示第i个人认识的人的区间左右端点。每次在参加...原创 2019-04-19 23:52:48 · 804 阅读 · 10 评论 -
2019牛客多校赛 第一场 I题 Points Division (DP + 线段树)
大致题意:给你n个点,第i个点在的位置为(xi,yi),有两个属性值(ai,bi)。现在让你把这n个点划分为A和B两个部分,使得最后不存在i∈A和j∈B,使得xi>=xj且yi<=yj。然后对于所有的划分方法,找到并输出 首先那个划...原创 2019-07-19 12:59:40 · 941 阅读 · 26 评论 -
2019牛客多校赛 第八场 H How Many Schemes(AC自动机 + 矩阵 + 向量 + 树链剖分 + 线段树)
大致题意:给你一棵树,每条边上有一个字符串,然后有一些模式串。现在给你一个询问<u,v>,问你u到v的路径上,每个条边任意选择一个字符,最后按照顺序组成一个字符串,最后的字符串包括至少一个模式串的方案有多少种。看起来很难的样子,写起来其实很复杂,但是理解清楚了其实思路也不太难。首先,既然涉及到匹配问题,而且是多个模式串,很容易想到对模式串建立AC自动机。...原创 2019-08-15 20:57:54 · 333 阅读 · 0 评论 -
CodeForces 1217E Sum Queries?(线段树)
打比赛的时候,最后两分钟发现是INF设小了,改了之后没来得及交上去比赛就结束了。。。大致题意:有n个数字,m个操作。操作分为两种,1是修改某个数字,2是询问某个区间内是否存在一个集合,使得集合内数字的和存在至少一位,在所有的集合内数字对应位中都没有出现过,如果有输出最小的,否则输出-1。看起来好难的样子,要求的是一个集合而不是连续区间,然后判断条件是和的每一位数字,而且...原创 2019-09-06 08:22:59 · 339 阅读 · 0 评论 -
CSU 1913: 送礼物 (二分答案 + 线段树)
不得不说,湖大出得一手好题,出现了一次两题场…… 数学什么的、fwt什么的简直被玩坏……最后发现有些题目还可以水过,对就是这题,湖大大佬O(N^2)水过了…… 回过头来看这题,这个思想确实非常的巧妙。原创 2017-05-06 10:49:34 · 737 阅读 · 0 评论 -
CodeForces 833B The Bakery(dp+线段树优化)
很容易看出转移方程的dp。 大致题意是,给你n个面包,m个盒子,每个盒子的价值定义为盒子中面包的种类数,然后要求每个盒子都要放至少一个面包,问最后总的价值和最大是多少。很容易写出状态转移方程:dp[i][j]=max(dp[i-1][k-1]+val[k][j]),其中dp[i][j]表示前j个面包用i个盒子装的最大价值总和,val[i][j]表示第i个面包到第j个面包中的面包种类数。现在问题的关键在于时间复杂度,暴力做复杂度是O(NMK)显然需要优化。 由于这种形式比较像斜原创 2017-09-26 17:01:48 · 361 阅读 · 0 评论 -
CSU 1811 Tree Intersection(线段树+启发式合并 解法)
首先规定 1 号结点为整棵树的根(其它号也可以)。对与每一条边,就看成是某个结点于它的父结点的连边,于是,删掉这条边后两个连同块的共有颜色数,就等价于以这个结点为根的子树里共有颜色数(只有两个连通块,其中一个连通块的“公共颜色”即是两个连同块的公共颜色)。公共颜色是什么呢?假如在其中一个连通块中有 2 个绿色结点,而原树一共有 4 个结点是绿色的,那绿色就是这两个连通块的公共颜色之一;反之,这个连通块有一个黑色结点,而原树也总共只有一个黑色结点,那黑色就是这个连通块“私有”的颜色。转载 2017-08-27 10:22:35 · 591 阅读 · 0 评论 -
ZOJ 2112 动态区间第K大(二分答案+线段树套Treap)
人生第一道树套树? 之所以打问号,是因为其实之前写二维线段树的时候,那个也可以相当于是线段树套线段树,所以严格意义来说这个不是第一个道题…… 普通的区间第k大很简单,各种数据结构乱搞就行了,但是如果要支持修改的话就一定要树套树。之所以用了Treap,就是想多熟悉一下,毕竟之前平衡树用的太少了。然后具体思路也是很简单,外面虚建一棵线段树,作用就是把区间分段,分段的同时对于每一个区间都建立一棵Treap,用来维护子区间的大小关系。由于Treap支持删除和插入操作,所以相当于可以进原创 2017-08-25 16:17:14 · 467 阅读 · 0 评论 -
2017多校训练赛第四场 HDU 6070(二分答案+线段树+扫描线)
一道常规题,还是那句话,比赛的时候就是蠢…… 本题是问,区间内 (题目数目)/(区间长度)的最小值。不巧的是,这一类问题比较就没有遇到了,所以说比较蠢,没有想到最优比例生成树这个经典模型。最优比例生成树是今年寒假的时候就见到的模型,大致就是每条边有两个权值ai和bi,然后要你求一棵生成树,使得最后树的 所有ai之和/所以bi之和最大或者最小。解决的方法就是用二分答案,我们假设这个最后的比例是k,为了方便表示我们把ai之和表示为sa,bi之和表示为sb,那么有:sa/sb=k。然后我们设最优解原创 2017-08-04 20:37:01 · 515 阅读 · 0 评论 -
2017多校训练赛第九场 HDU 6162(离线处理+树链剖分+线段树解法)
离线处理的题目千千万万,但很多时候还是能够让你耳目一新…… 没有修改操作,很显然可以离线水。但是与普通的lca不同,这题要求是求点权在一个区间内的两点路径权值和。加了个值域,就足以让人头疼。但是,万能的我(not)们(me)总能想到方法解决。对于一个询问(x,y,l,r),如果我们把它拆成(x,y,l-1)和(x,y,r)会发生什么呢?没错,如果我能够分别求出这两个,那么把他们两个相减不久可以得到结果了吗。但是,即使如此,还是有一个最大值的限制,不过不要忘了,我们可是在离线处理啊。每个点都有原创 2017-08-24 22:40:07 · 503 阅读 · 0 评论 -
2017多校训练赛第一场 HDU 6039 Gear Up(线段树+并查集)
大致题意:给你一些齿轮,有些齿轮是共边(即线速度相同),有些齿轮是共轴(即角速度相同),每个齿轮都有自己的半径而且大小都是2的次方,保证不会出现矛盾,然后总共有两种操作,一是改变某个齿轮的半径,二是询问如果给某一个齿轮一个角速度(大小也是2的次方),所有齿轮中角速度最大的角速度取自然对数后是多少。 根据物理知识,如果两个齿轮共边,那么有w1r1=w2r2,为了方便计算,我们不妨取log2(题目数据刚好是2的次方,然后log2是系统自带函数)。如此一来,我们就可以计算出每一个节点与某一个参考原创 2017-07-26 14:34:28 · 1479 阅读 · 0 评论 -
CodeForces 718C Sasha and Array(矩阵类+线段树)
虽然说矩阵快速幂不是本题的主要算法,但在这题却发挥着举足轻重的作用。 大致题意就是,给出一组数列,有区间加和区间求和两种操作。但是不同的是,这里的求和不是单纯的数字相加,而是Fibonacci数列的第ai项,即Fibonacci数列对应项的总和。如果用普通的区间更新,增加操作非常简单,但是区间的Fibonacci数列对应项之和却不好求。这个时候矩阵就派上了用场。原创 2017-07-22 09:01:08 · 542 阅读 · 0 评论 -
HDU 5875 Function (取模+分治+线段树)
非常有意思的一道题目。 通过函数的关系式,很容易推出f(l,r)=a[l]%a[l+1]%...%a[r]。显然,对于l左边比a[l]大的数字取模并没有什么意义,所以我们只需要对比a[l]小的数字取模。进一步发现,随着取模的进行,又可以去掉很多点。即a[l]%第一个比a[l]小的数字=c,c%第一个比c小的数字……可以证明,一个数字取模到不能取模(等于0),最多进行logN次运算。下面给出证明:数字N,假设对a(N/2<a<N)取模,得到的结果为N-a,小于N/2;假设对a(a<N/2)取模原创 2017-07-21 21:32:34 · 354 阅读 · 0 评论 -
SPOJ 2713 Can you answer these queries IV(线段树)
线段树的题真是好多,像这个系列,一直可以到Ⅵ、Ⅶ。 Ⅲ我就不说了,就是在Ⅰ的基础上加一个单点修改,Ⅳ可就几乎是完全不同了,它是要区间开根号,然后询问区间和。可能你会说,区间开根号怎么做,如何维护区间和?因为区间开根号后,区间和的值显然不是原值开根号(叶子节点除外)。开始我还想了用对数去解决这个问题,对于对数,对真数开根号,等于对对数除以2。但是对数的和并不是想要的区间和。原创 2017-07-20 09:06:36 · 434 阅读 · 0 评论 -
CSU 1809 Parenthesis (线段树)
看见括号的题,第一反应就是要把括号变成1和-1。 把左括号看成1,右括号看成-1,然后看前缀和数组是否会出现小于0的,出现则说明中间出现匹配错误,由于题目保证初始时是匹配的,所以最后的总和肯定为0,不去管它。这题的话,每次问你交换两个括号的位置,看是否还是匹配的。那么我们仔细观察一下括号。显然,如果括号位置交换,对于前缀和数组来说,会发生变化的就是两个位置之间的单元(不包括右端点),我们只需要判断之间是否会出现负数。然后如果两个位置的括号相同,那么交换不会发生任何改变。同时如果是左括号在前,原创 2017-07-20 08:42:20 · 310 阅读 · 0 评论 -
SPOJ 1557 Can you answer these queries II(离线处理+线段树求历史最大)
膜拜杨哲大犇orz…… Can you answer these queries……这也是一个系列,线段树系列。 之前第一个我们已经写过了,就是求区间最大连续子串。这个与第一个不同,这个要求是已经取过的数字,第二次遇到了不计算,即子串1、2、1的和是3而不是4。也就意味着,你询问区间的不同,对应的最大连续子串也会不同,故显然在线线段树是做不了的,继续用离线大法。原创 2017-07-19 16:05:23 · 395 阅读 · 0 评论 -
HDU 5493 Queue(线段树+离线处理)
离线大法好! 首先我先比较系统的说说什么是离线法。所谓离线法,与在线处理对应,是把询问先全部存下来,然后不一定按照给出询问的顺序来回答,而是按照某种能够提高效率的顺序回答。最著名的例子莫过于莫队算法,离线的其本质就是对询问进行排序,然后求解。我前两天发的星球大战和统计整除对的题都用到了离线法,后面还有题目也会用到。原创 2017-07-18 21:50:52 · 394 阅读 · 0 评论 -
SPOJ 1043 Can you answer these queries I (超强线段树)
题意简单明了,静态求区间最大连续子序列。 想起之前做过的一道LCT的题目,是求链上染色区域个数,和这个有丝丝相似。 首先,通过观察区间最大连续子序列和的构成,我们发现,某一个区间的最大连续子序列max的备选序列可以是它的左右子区间的最大连续子序列,或者是左子区间的最大右端连续子序列rmax与右子区间的最大左端连续子序列lmax的和。那么在一棵线段树中,我们需要维护的就是该区间的最大连续子序列max、最大左端连续子序列lmax和最大右端连续子序列rmax。原创 2017-07-18 13:02:09 · 177 阅读 · 0 评论 -
二维线段树(模板)+HDU 4819
好久没有研究数据结构了,今天看到了一个二位ST表的题目,心里突然就想到了二位线段树,于是决定写写,后来发现坑还是很深的…… 首先,我们很容易想到的方法是对于二维的,把原本的一维二叉线段树,变成一个二维的四叉线段树。这个的话更容易理解,也貌似很好写很短很漂亮,但是当然了,有很大的缺点就是速度很慢。我试过写了一个发现 HDU 4819 直接tle了,然后非常愤怒的放弃了这种方法,当然可能是我写错了。这里关于这种方式,我给一个链接,这里面配合了很多图片,讲得很好, 点击此处打开链接 但是代码风格和原创 2017-06-10 16:58:03 · 704 阅读 · 0 评论 -
CodeForces 802G Periodic RMQ Problem(线段树+分块思想)
Educationnal CodeForces Round 20 G 果然是Educational,确实可以学到好多东西。 两种操作,区间赋值和询问区间最小,但是总区间是由k个长度为n的相同区间组成,如果直接用普通的线段树去做,很显然在空间上存不下,在时间上也无法接受。所以,很自然的要找一些规律。原创 2017-05-12 11:20:14 · 597 阅读 · 0 评论 -
WOJ 641 Events 线段树解法
这题终于终于终于用线段树TMD AC了! 想当初在赛场上怒调了三个小时的线段树,然后就是WA……满脸的辛酸…… 这题的分块算法我之前也写了文章,然后虽然分块确实更简单,但是我不甘心赛场上花的时间,于是死磕线段树。然后现在终于A了,虽说过程坎坷。 通过这题还是发现自己的线段树的深层次的理解还是不够,个人认为此题作为线段树的提升题目非常的好,然后这题其实要考虑的东西挺多的,我都会提到的。原创 2017-04-13 21:08:28 · 406 阅读 · 0 评论 -
BZOJ 2243(树链剖分+线段树 解法)
2243: [SDOI2011]染色Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 7107 Solved: 2659[Submit][Status][Discuss]Description给定一棵有n个节点的无根树和m个操作,操作有2类:1、将节点a到节点b路径上所有点都染成颜色c;2、询问节点a到节点b路径上的颜原创 2017-03-02 18:37:38 · 417 阅读 · 0 评论 -
自己对树链剖分的理解(模板)
说到树链剖分,其实故事还挺多的。我记得在高中的OI经历中,我曾无数次听到这个名词,各种省赛、邀请赛貌似都会考这个东西,那时我觉得树链剖分深不可测,是我等蒟蒻不能理解的东西……然后我还记得,某年(好像是NOIP2014?)有一题貌似也要用树链剖分。总之是被虐的一B,然后现在觉得这个东西也没什么难的…… 好吧,言归正传。所谓树链剖分其实就是树的轻重链剖分,而树链就是指从某一父节点一直原创 2017-02-04 18:53:27 · 510 阅读 · 0 评论 -
POJ 2763 Housewife Wind (LCA+线段树)
好久没有做树的题了…… 这题就是一棵树,给出两种操作,一是求两点最近距离,二是修改对应边的权值(是修改而不是更新)。 其实呢,这题用很多方法都可以做,什么树链剖分、LCT都行,但是我还是用了线段树,一是最近这个模板用的比较熟悉,而是练练LCA的写法。具体的话,首先在LCA预处理的时候,顺便把每个点的dfs序给求出来。之后求出被修改边的改变量,对其子树的所有点区间增加这个改变量,就达到了这个要求。求最短路的时候,直接d[x]+d[y]+d[lca(x,y)]即可。原创 2017-07-21 19:56:26 · 445 阅读 · 0 评论