LCT
XSamsara
AFO
展开
-
BZOJ 2049: [Sdoi2008]Cave 洞穴勘测【LCT】
2049: [Sdoi2008]Cave 洞穴勘测 【题目描述】 传送门 【题解】 裸地link Cut Tree。最近刚学,所以打了一些模板题。 代码如下 #include<cstdio> #include<algorithm> #define MAXN 10005 using namespace std; struct Link_Cut_Tree{ ...原创 2018-07-05 11:16:56 · 174 阅读 · 0 评论 -
BZOJ 4530: [Bjoi2014]大融合【LCT】
4530: [Bjoi2014]大融合 【题目描述】 传送门 【题解】 我们需要维护两个值,子树的信息(W[])和虚儿子(a[])的信息。 void PushUp(int x){if(x) W[x]=W[Son[x][0]]+W[Son[x][1]]+a[x]+1;} 然后我们需要在Access中更新这个a[]的值。 void Access(int x){ for(int...原创 2018-07-05 22:02:07 · 189 阅读 · 0 评论 -
BZOJ3669: [Noi2014]魔法森林【并查集+LCT】
3669: [Noi2014]魔法森林 【题目描述】 传送门 【题解】 我们发现只要记录这条路径上的最大值就可以了,那么我们可以强制其中一个为最大值,然后判断是否联通,更新答案(也就是将a排序,然后维护1到n中b的最大值就可以了) 可以用LCT解决,考虑这个两个节点全部被加入,那么我们用这个b替换掉这条路径上最大的b,就可以了。 【代码如下】 #include<cstdio> #inc...原创 2019-03-12 07:30:00 · 128 阅读 · 0 评论 -
LCT动态树【史上最精简易懂的LCT讲解】
Link Cut Tree(动态树,LCT) 介绍 首先简单介绍一下Link Cut Tree,将一棵树分成轻边和重链,类似于树链剖分,但是树剖是静态的。LCT可以用于动态的加点和删点,甚至还可以换根。也就是LCT维护了一个动态的树。 LCT中的每棵Splay都维护了一条重链(实际上是实链,这里统一讲重链)上的答案。多颗Splay连成一棵树,这棵Splay满足左儿子在树上的深度(这里深度指的是在数...原创 2019-03-12 13:24:19 · 1704 阅读 · 1 评论 -
BZOJ2843: 极地旅行社【LCT+并查集】
2843: 极地旅行社 【题目描述】 传送门 【题解】 就是裸的LCT,只要维护Splay中节点的和就可以了,连通性可以用并查集判。 【代码如下】 #include<cstdio> #include<algorithm> using namespace std; const int MAXN=30005; int n,Q,a[MAXN],fa[MAXN];char ch[M...原创 2019-03-12 16:27:18 · 116 阅读 · 0 评论 -
BZOJ4573: [Zjoi2016]大森林【LCT+扫描线】
4573: [Zjoi2016]大森林 又是一道神仙毒瘤题,我们可以将询问放到最后,这样就可以用扫描线搞了,对于第iii棵树,可以从第i−1i-1i−1棵树继承过来,所以我们可以建一棵LCT来维护。 但是这题的难点是1操作,对于1操作我们建虚点,让0操作的点连向输入时间最近的虚点,然后虚点之间连边(i,i−1)(i,i-1)(i,i−1)。每次遇到1操作,断开这个操作原来的虚边,连向实际的节点。但...原创 2019-03-21 07:25:13 · 191 阅读 · 0 评论 -
BZOJ4817: [Sdoi2017]树点涂色【LCT+线段树+LCA】
4817: [Sdoi2017]树点涂色 我们发现1操作就是LCT的Access操作,对于每个1操作,在Access的同时构造Val数组,我们会发现当前实儿子所在的子树Val++,Access后的实儿子Val–。所以可以用DFS序+线段树进行维护。 2操作就是Val[x]+Val[y]-2*Val[fa]+1 3操作直接维护区间最大值就可以了。 #include<cmath> #inc...原创 2019-04-17 20:24:00 · 225 阅读 · 0 评论