lct
seeeagull
这个作者很懒,什么都没留下…
展开
-
[P2173][ZJOI2012]网络(LCT)
颜色数很少,可以每种颜色用一个lct维护。更改节点值就把每个lct的改节点都转到根改一下。更改边的颜色时,先枚举颜色,若每个lct中x和y节点都不连通,则No such edge.;如果之前的颜色和新的颜色相同,直接Success.;每个节点维护一下它连的边的数量s,s只在link和cut操作时会修改,如果在新颜色中x或y的s已经为2,则Error 1.;split判断x和y是否已连通...原创 2019-05-19 15:21:10 · 181 阅读 · 0 评论 -
[P1501][国家集训队]Tree II(LCT)
这道题需要记加法和乘法两个标记,因为运算律所以下放时先下放乘法。所以当需要给一个节点改乘法标记时,也要修改加法标记,相当于把括号打开,将加法标记乘上新的乘法标记。需注意模数的平方超过了int类型的范围。题目保证加完新边仍为一颗树,但貌似没有保证删边合法,所以我还是判断了一下……#include<cstdio>#include<algorithm>#def...原创 2019-05-14 16:59:31 · 155 阅读 · 0 评论 -
[P3703][SDOI2017]树点涂色(dfs序+LCT+LCA+线段树)
首先每次染色都是染一种新颜色,且一定从根开始,所以从根到一个节点的相同颜色都在一段内,不同颜色数即是颜色段数。所以如果对于每个节点,维护一下它到根节点的不同颜色数,似乎操作2和3都可以求出了。对于操作2,用类似于树上差分的思路,x->y的颜色数=x到根的颜色数+y到根的颜色数-2*lca(x,y)到根的颜色数+1,因为每次都是染新颜色,所以两段的连接处不可能颜色相同,保证这样做是正确的。...原创 2019-05-15 23:27:11 · 130 阅读 · 0 评论 -
[P2387][NOI2014]魔法森林(LCT)
将所有边按a从小到大排序,加入一条新边(u,v)时,检查原先u和v是否连通,若连通则断开旧路径,新路径上最大的b和新加入的边的a相加,看能否更新答案。既然是动态加边和删边,便考虑用lct。要查询两点间路径上的最大值,所以点和边都要建节点,并且维护最大的b和其对应的边的标号。当加入新边检查是否两点已联通时,先把b最大的边断开再连接新边,但如果已经联通且旧路径上最大值小于新边的值,就不用再试新边了...原创 2019-05-17 22:38:55 · 103 阅读 · 0 评论 -
[P4219][BJOI2014]大融合(LCT)
动态连边,可以lct做。容易看出通过一条边的简单路径数量就是在lct上分别以两个端点为根的树的总大小(除去以另一个节点为根的子树总大小)相乘,但普通lct只能维护节点的重链连接的子树大小,所以这里要开两个变量,x2维护一个节点所有轻链连接的子树大小,x1维护以该节点为根的树的总大小。x1=左子树的x1+右子树的x1+1+节点的x2。和普通lct的更新差不多。至于何时更新x2,应该是只有边的轻重...原创 2019-05-18 10:45:06 · 98 阅读 · 0 评论