数据结构---LCT
文章平均质量分 72
forezxl
水君一枚
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LCT(动态树)(洛谷P3690)(BZOJ3282)
推荐这篇论文 前置技能 Splay和树链剖分 简介 动态树问题, 简称LCT,近几年在OI中兴起的一种新型问题,是一类要求维护一个有根树森林,支持对树的分割, 合并等操作的问题。 算法用途 比如维护一个数据结构,有如下操作: 1.查询路径权值和。 2.查询LCA。 3.修改单个点的权值。 4.断开两个点,使之成为两棵树。 5.合并两个点,使之成为一颗树。 当然还...原创 2018-01-07 19:44:00 · 646 阅读 · 0 评论 -
BZOJ4025: 二分图
LCT 题目传送门 Orz写分治+并查集的巨佬 考虑用LCT维护,但是如果直接模拟的话肯定不行。那么可以维护一个关于消失时间的最大生成树,这样可以保证每条非树边不会重复成为树边,每条树边被删去后也不会重新变成树边。 代码: #include<cctype> #include<cstdio> #include<cstring> #include<algori原创 2018-09-23 10:26:13 · 201 阅读 · 0 评论 -
BZOJ3091: 城市旅行
LCT 题目传送门 Orz PoPoQQQ大爷 前三个操作都是板子,关键是第4个操作的维护。分母为(size2)size\choose2(2size),那么只要维护分子即可。对于大小为sizesizesize的节点,分子即为∑i=1size(size−i+1)×i×wi\sum_{i=1}^{size}(size-i+1)\times i\times w_i∑i=1size(size−i+1)...原创 2018-09-19 21:00:23 · 226 阅读 · 0 评论 -
洛谷P1501 [国家集训队]Tree II(BZOJ2631)
LCT 洛谷题目传送门 BZOJ题目传送门 记一个乘标记和一个加标记来维护。如果打过维护区间乘和加操作的线段树的话这道题就很轻松了,但是LCT因为会动还要维护一个size。其它都是一些细节,如下传乘标记时也要修改加标记,下传加标记时和要乘上size什么的。 代码: #include<cctype> #include<cstdio> #include<cstr...原创 2018-07-31 15:02:11 · 287 阅读 · 0 评论 -
BZOJ2959 长跑
LCT 并查集 BZOJ题目传送门 LCT维护双连通分量。 如果没有1操作可以Tarjan+树剖水过,现在是动态的话就用LCT维护。 当AAA和BBB不连通时直接连起来。当AAA和BBB已经连通时,把它们所在的双连通分量缩到一个点上。具体操作为先把AAA和BBB搞到同一个Splay里,然后遍历Splay,用并查集把所有点都缩到一个点上去并把权值赋给它。 判断是否连通可以直接用LCT,然而...原创 2018-07-13 20:57:45 · 307 阅读 · 0 评论 -
洛谷P4172 [WC2006]水管局长(BZOJ2594)
LCT 最小生成树 洛谷题目传送门 BZOJ题目传送门 改了好久。。。都跨月了 最后发现x&gt;y的时候没有swap然后排序就炸了。。。 同这道题。 维护边权套路加一个点。 删边的话就把过程倒过来,从最终状态加边就好了。具体实现详见代码(记个id然后sort一下) 注意数据加强版要先在最终状态的那几条边跑MST,完成了就break,不能像那道题一样和加边一起算(别问我怎么知道的,1...原创 2018-04-07 10:47:34 · 295 阅读 · 0 评论 -
BZOJ2816: [ZJOI2012]网络(洛谷P2173)
LCT BZOJ题目传送门 洛谷题目传送门 这。。。就是裸题啊 既然c≤10c≤10c\leq10,那么我们建ccc颗LCT就好了。 对于刚开始的边,按照边的颜色把两个节点link起来就好了。 对于操作0:直接改就好了。。。 对于操作1:找到这条边在哪个LCT上,然后分情况讨论就好了,具体看代码。 对于操作2:直接查就好了。。。 代码: #include&lt;cctype&g...原创 2018-03-22 20:04:46 · 291 阅读 · 0 评论 -
BZOJ4530: [Bjoi2014]大融合(洛谷P4219)
LCT BZOJ题目传送门 洛谷题目传送门 显然答案为sz[x]∗sz[y]sz[x]∗sz[y]sz[x]*sz[y],但是因为这棵树会“动”,不能每次求一遍答案。 设sz[x][0/1]sz[x][0/1]sz[x][0/1]表示x中虚边连接的/总的节点个数。那么有sz[x][1]=sz[x.l][1]+sz[x.r][1]+sz[x][0]+1sz[x][1]=sz[x.l][1]+...原创 2018-03-09 19:09:25 · 479 阅读 · 0 评论 -
BZOJ3669: [Noi2014]魔法森林(洛谷P2387)
LCT 最小生成树 BZOJ题目传送门 洛谷题目传送门 先对边按照a排个序,就像cdq分治那样除去其中一维的影响,而b用LCT动态维护最大值。 当边的两端不连通时直接加边,否则找到两端路径上b的最大值,与当前边比较考虑是否加入并删除原来的边。 但是LCT搞不了边权,可以把一条边变成一个点,然后并把边权赋给这个点(如x−>yx−>yx->y变成x−>z−>yx−&g...原创 2018-03-12 14:47:06 · 432 阅读 · 0 评论 -
BZOJ4817 [Sdoi2017]树点涂色(洛谷P3703)
LCT 线段树 BZOJ题目传送门 洛谷题目传送门 码力不行啊 操作1就是access啦 操作2就是w[x]+w[y]−2∗w[lca(x,y)]+1w[x]+w[y]−2∗w[lca(x,y)]+1w[x]+w[y]-2*w[lca(x,y)]+1啦 操作3就是先DFS序然后线段树查一查区间最大值啦 每个节点到根的颜色数为虚边数+1。(access后虚边即代表和上一个点的颜色不一样...原创 2018-03-07 21:13:34 · 391 阅读 · 0 评论 -
BZOJ2843: 极地旅行社
LCT 题目传送门 继续划水打模板 代码: #include #include #include #include #define N 30005 #define il inline #define iv il void using namespace std; struct node{ int fa,to[2],f,sz; }t[N]; int a[N],n,m,stk[N],t原创 2018-01-10 20:07:29 · 318 阅读 · 0 评论 -
BZOJ2049: [Sdoi2008]Cave 洞穴勘测(洛谷P2147)
LCT BZOJ题目传送门 洛谷题目传送门 简单的LCT应用。 每个询问其实就是询问他们的祖先是否相等。只需要access(x),splay(x),再不断往左走到最底就是x的祖先了。 LCT不会? 丑陋的代码: #include #include #include #include #define N 10005 #define il inline #define iv il voi原创 2018-01-10 18:54:58 · 244 阅读 · 0 评论 -
BZOJ2002: [Hnoi2010]Bounce 弹飞绵羊(洛谷P3203)
LCT BZOJ题目传送门 洛谷题目传送门 新增一个点n+1表示弹飞的点。 刚开始把i和i+ki接起来,查询时直接把x到n+1的路径拎出来,答案就是节点个数-1。改值时把x和x+ki断开,再把x和x+y接起来。注意对n+1取min。 代码: #include #include #include #include #define N 200005 #define il inline #d原创 2018-01-07 21:11:26 · 316 阅读 · 0 评论 -
BZOJ2752: [HAOI2012]高速公路(road)(洛谷P4412)
LCT BZOJ题目传送门 洛谷题目传送门 这道题的弱化版,用线段树维护就可以了。但我懒所以就直接双倍经验了。 代码: #include<cctype> #include<cstdio> #include<cstring> #include<algorithm> #define N 100005 #define F inline #define V ...原创 2018-09-28 21:30:48 · 265 阅读 · 0 评论
分享