LCT动态树
Wuliwuliii
谁无暴风劲雨时,守得云开见日明!
展开
-
[SDOI2017]树点涂色【LCT的Access函数的妙用】
题目链接 有一颗有根树,1为根节点,有这样的操作:我们给从1~x的节点染色成相同且未出现过的颜色,现在我们想知道u到v的简单路径上不同颜色的个数、或者u的子树下到根节点颜色数最多的颜色数是多少? 其实,我一开始没有往LCT想,但是它非要挂了个标签,于是开始想了,如果说我们将1号节点默认成根节点,并且是整棵LCT树上的根节点,那么,如果一开始将所有的节点看成是独立的Splay树上的节点,每棵Splay树上有且只有一个点。那么,颜色的个数,实际上就是它到根节点需要Access的次数,并且可以换一种表..原创 2020-08-10 10:36:22 · 213 阅读 · 0 评论 -
[BJOI2014]大融合【LCT维护子树信息】
题目链接 本题保证不会构成环。——此为前提 然后操作是查询,或者接上一条边(保证之前两点不连通)。 好了,接下去就是正经事儿了,在此之前,已经有了利用LCT来维护树链信息了,现在只要在这基础上稍加改变,就可以维护某点(也可以是不定根)的子树信息了。 我们知道,改变LCT树的连接关系,只会在Access、link、cut这几种操作为基础的操作上,因为我们知道LCT树为多个Splay树的森林,他们通过虚链进行连接,先来举例一下Access时候。Access函数与子树关系 正常写...原创 2020-08-07 21:27:03 · 742 阅读 · 0 评论 -
[WC2006]水管局长【LCT】
题目链接 就是说,有个水管(人),他要打开水管(物),使得水能从u流到v,然后每个水管打开需要时间,问能让水从u流到v,最少需要的时间,那么其实也就是路径上水管的最大时间了,现在我们要让这个最大值最小。 但是,有删除操作诶!那么,既然删除不会重复,我们不妨把删除当作插入来做,除了永久边以外,剩下的边从时间戳从后往前插入,不就相当于是删除了。 于是,实际上还是维护一个最小权生成树了,遇到一条边可以替换环上的最大边,就直接替换了,这样贪心的去找,就可以了。#include <ios...原创 2020-08-07 16:22:21 · 162 阅读 · 0 评论 -
[NOI2014]魔法森林【LCT】
题目链接 有N个点,M条边,要使得从1点到N点的(最低要求ai和最低要求bi)的和最小,问最小和。 那么,很显然的,就是求一个联通关系,与最短路无关,因为限制条件不唯一,需要同时限制ai和bi,所以我们不妨枚举一维,然后再是维护一维。 我们对A关键字进行升序处理,然后我们维护一棵B关键字的最小生成树,然后枚举这样的最小生成树的答案不就可以了吗? 我们不断的进行加边操作,然后对B关键字操作,每次看新的B能否替换之前的B树,这就是我们维护的最小生成树了,然后更新答案即可。 更新答案...原创 2020-08-07 14:21:20 · 181 阅读 · 0 评论 -
[SDOI2008]洞穴勘测【LCT维护联通关系】
题目链接 LCT判断两点联通的这样的一个基础问题,因为不存在环,所以直接LCT维护连接关系即可。#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#include <algorithm>#include <limits>#include <vector>#incl.原创 2020-08-07 09:04:29 · 115 阅读 · 0 评论 -
[HNOI2010]弹飞绵羊【LCT】
题目链接 很明显,如果和下一个弹到的节点连接一条边的话,那么就会形成一棵森林,我们要求的答案实际上就是它父亲节点的个数+1,但是维护一个森林,我们还需要存储每个森林的位置,比较的麻烦了,所以我们不妨开一个点,作为超级点,将所有的森林连接起来,那么现在的答案就是它到超级节点连接的边的个数了,实际上就是节点数-1,于是就可以利用LCT进行维护了。#include <iostream>#include <cstdio>#include <cmath>#incl.原创 2020-08-06 09:51:05 · 201 阅读 · 2 评论 -
[国家集训队]Tree II【LCT动态树lazy标记】
P1501 [国家集训队]Tree II 因为本题树形结构会改变,所以这里需要使用LCT来代替树链剖分来解决问题,所以就要涉及到关于LCT的一条链上的lazy标记的下放了。 很明显的一件事就是,我们可以在pushdown()操作中进行下放懒标记,因为本题与是否翻转没有直接关联,所以无须考虑r[]的翻转标记的作用。void pushdown(int x){ clear(0); if(mul[x] ^ 1) { if(c[x][0]) ..原创 2020-08-06 09:12:45 · 208 阅读 · 0 评论 -
All-Star Game【LCT维护最大权生成树】
题目链接 题意:有N个球员,还有M个球迷,然后有:这是球迷去看球员比赛的条件,然后现在问最少多少个球员,就可以使得所有的球员都可以去看球赛。 然后有Q次操作,会使得球迷x和球员y的关系进行转换,如果球迷x原本喜欢y现在就不喜欢了,如果原本不喜欢,现在就喜欢了。 好了,我们可以发现这Q次操作,实际上就是保证了原来存在的边,现在把它删除;原来不存在的边,现在把它加进去。于是,再分析,我们可以发现,我们实际上要求的是有关M个球迷的合法联通块的个数(一定要有一个球员的联通块)。 于是...原创 2020-08-04 10:43:37 · 221 阅读 · 0 评论 -
「离线可过」动态图连通性【LibreOJ - 121】【LCT】
题目链接 听说在线解法是用ETT(Euler Tour Tree),不懂不懂。 给你的是一幅图,不是树,所以直接使用LCT的就会发现第二个样例变成了"NYNN"。当然,我一开始也是确实没有看到的。 然后,对于图,该如何进行操作呢,我们知道他是什么时候删除的,那么,只要连通性,又不需要最短路,所以不妨就是用离线的方式来进行操作了,因为只需要保证联通,所以我们肯定是要走删除的晚的路才可以,那么,我们将原图存成一棵树,这棵树上的边都是删除时间尽可能晚的,如果不删除的边,定义为INF,然后维护这棵...原创 2020-05-14 11:19:43 · 628 阅读 · 0 评论 -
QTREE4 - Query on a tree IV【LCT】
题目链接给定一棵n个点的带边权的树,点从1到n编号。每个点可能有两种颜色:黑或白。我们定义dist(a,b) 为点a至点b路径上的权值之和。一开始所有的点都是白色的。要求作以下操作:C a将点a的颜色反转。(黑变白,白变黑)A询问dist(a,b) 的最大值。a,b点都必须为白色(a与b可以相同),显然如果树上仍存在白点,查询得到的值一定...原创 2020-05-07 23:38:08 · 298 阅读 · 0 评论 -
QTREE5 - Query on a tree V【LCT】
题目链接你被给定一棵n个点的树,点从1到n编号。每个点可能有两种颜色:黑或白。我们定义dist(a,b)为点a至点b路径上的边个数。一开始所有的点都是黑色的。要求作以下操作:0 i 将点i的颜色反转(黑变白,白变黑)1 v 询问dist(u,v)的最小值。u点必须为白色(u与v可以相同),显然如果v是白点,查询得到的值一定是0。特别地,如果作'1'操作时树上没有白点,输出-...原创 2020-05-06 16:20:31 · 324 阅读 · 0 评论 -
J- Graph【2019ICPC沈阳】【LCT+哈希】
题目链接 有两棵上限是N个点的树(有时候是森林),有两个小伙伴分别操作自己的一棵树,小伙伴A和小伙伴B,现在小伙伴们想知道对方的树上能相互抵达的两个结点,在本棵树上是否也是可行的,也就是树的同构“同分异构”(每棵子树含有的结点相同,但是结构可能不同)。如果满足,则为YES,否则是NO。 有一种很神奇的方法,叫做给一条边的两个端点,同时异或一个值,那么如果说这两个端点在另一棵树上也是相连...原创 2020-04-30 21:08:23 · 307 阅读 · 0 评论 -
城市旅行【BZOJ 3091】【LCT】
题目链接很好的一次的debug的经验,来来回回的splay和rotate,眼花缭乱的一次次记录每次的实虚边所构成的多个splay的森林。 题目求的是取一条链上的任意两个点构成的边的权值的期望,其实可以考虑成点被选取的次数乘以该点的权值。一条链上,每个点所产生的贡献(被作为构成边上的点)为这个点(左边的点的数量+1)*(右边的点的数量+1)——这是它的出现的次数,然后乘以它的权值,就是期望...原创 2020-04-29 15:51:20 · 179 阅读 · 0 评论 -
Distance Queries 【POJ--1986】【动态树LCT】
题目链接 虽然LCA也是可以写的,但是动态树明显写起来简单的多(雾)只是个人观点。 我们这道题,暗藏了一个信息就是它一定是一棵树,题目中有这样说到,每两个点一定是相互链接,或者是“一串”这样的可以到达的。 然后就是直接上LCT的模板咯,并且将边看成是一个新的点即可。#include <iostream>#include <cstdio>#incl...原创 2019-07-08 15:56:58 · 196 阅读 · 0 评论 -
请求【牛客假日团队赛1】【LCT+树的直径】
题目链接题目描述Farmer John注意到他的奶牛们如果被关得太紧就容易吵架,所以他想开放一些新的牛棚来分散她们。每当FJ建造一个新牛棚的时候,他会将这个牛棚用至多一条双向道路与一个现有的牛棚连接起来。为了确保他的奶牛们足够分散,他有时想要确定从某个特定的牛棚出发,到它能够到达的最远的牛棚的距离(两个牛棚之间的距离等于从一个牛棚出发到另一个之间必须经过的道路条数)。FJ总共会给出...原创 2019-06-11 14:48:26 · 354 阅读 · 5 评论 -
Query on a tree 【SPOJ - QTREE】【LCT】
题目链接就是两个问题,改变树上的一个点的值,以及查询一段链上的最大值问题。 我们直接拆点,并且构建LCT树,然后直接查询即可,模版题。#include <iostream>#include <cstdio>#include <cmath>#include <string>#include <cstring>#i...原创 2019-06-02 11:55:24 · 174 阅读 · 0 评论 -
Link Cut Tree (动态树)【P3690】
题目链接给定n个点以及每个点的权值,要你处理接下来的m个操作。操作有4种。操作从0到3编号。点从1到n编号。0:后接两个整数(x,y),代表询问从x到y的路径上的点的权值的xor和。保证x到y是联通的。1:后接两个整数(x,y),代表连接x到y,若x到y已经联通则无需连接。2:后接两个整数(x,y),代表删除边(x,y),不保证边(x,y)存在。3:后接两个整数(x,y),代表...原创 2019-06-02 10:12:53 · 115 阅读 · 0 评论 -
我大哥【LCT动态树】
题目链接Description上决╇ф发现一个很有趣的事情,现在很多人都有他们的大哥。毕竟嘛,大哥可以罩着他们,他们就能为所欲为了。但是,总有大哥不靠谱的时候,于是乎,他们就会选择换一个大哥。现在问题来了,当两个人发生争执的时候,如果他们有共同的大哥,他们就会和解。否则他们就会打起来。请注意,每个人只有一个直接的大哥,并且大哥的大哥,也是大哥。Input...原创 2019-06-06 11:03:30 · 343 阅读 · 2 评论