![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态树
文章平均质量分 57
DZYO
Never stop
展开
-
bzoj2555: SubString(后缀自动机+动态树)
Description 懒得写背景了,给你一个字符串init,要求你支持两个操作 (1):在当前字符串的后面插入一个字符串 (2):询问字符串s在当前字符串中出现了几次?(作为连续子串) 你必须在线支持这些操作。 Input 第一行一个数Q表示操作个数原创 2017-03-26 11:26:36 · 405 阅读 · 0 评论 -
BJ模拟:String(SAM+LCT+主席树)
传送门 题意: 给字符串SSS,支持: 1.末尾加入字符。 2.查询[l,r][l,r][l,r]中出现两次的最长字符串。 题解: 好题。 考虑离线做法: 动态插入后面的字符,更新前面lll的答案。 当我们插入一个字符rrr的时候,与前面的公共子串为它的后缀。 我们考虑暴力跳failfailfail链来更新答案: 每个位置记last表示endpos的最后一个位置,那么这个位置能...原创 2018-04-11 11:56:56 · 394 阅读 · 0 评论 -
NOI模拟:Death(虚树)
题意: 小 F 堕入了梦魇的世界,一只巨大的魔爪,或者说,一棵根节点为 1 的有根树,每个节点有 一个危险值 wiwiw_i 。 小 F 不会自己从梦境中醒来,她要在梦境中切断自己与梦魇的联系,才能逃离这个世界。 每次,小 F 都是从 1 号节点进入这个世界。 她要去编号为x1,x2...xkx1,x2...xk x_1 ,x_2 ...x_k 的节点上切断联系。 ...原创 2018-03-27 07:37:09 · 287 阅读 · 0 评论 -
BZOJ4573: [Zjoi2016]大森林 (LCT)
传送门 题解: 好题啊。 我们直接从左往右离线做。 问题就变成了动态插入,删除0,1操作。 明显插入删除1操作都是将连续的一段0换父亲, 我们可以建虚点来维护, 每个连续段的虚点彼此相连,插入则改变与前面的连接即可。 用LCT维护,时间复杂度O(nlogn)O(nlogn)O(n \log n)。 #include <bits/stdc++.h> using names...原创 2018-03-24 14:42:43 · 406 阅读 · 0 评论 -
SPOJ Query On a Tree IV (LCT)
传送门 题解: 此类树上路径问题大多可以用LCT解决。 考虑维护LCT时同时储存虚实边的信息。 对于实边,考虑记录lmax,rmax,maxlenlmax,rmax,maxlen,即是这颗Splay\text{Splay}从深度最浅的点出发到一个白点的最长距离,深度最深的点出发到一个白点的最长距离,以及以这颗Splay\text{Splay}上深度最浅节点为子树的路径最大值。 为了方便,记原创 2018-01-11 20:09:23 · 275 阅读 · 0 评论 -
BZOJ4530: [Bjoi2014]大融合(LCT维护子树,线段树合并)
传送门题意: 给一个动态树,维护sze集合大小。题解: 动态树。这里贴出一份LCT维护子树和的方法(不支持修改): 对于一个点x,如果我们对x进行access操作,那么他的虚子树内将包含且仅包含他原树中子树内除了他自己以外的所有点,这时如果我们维护了他的虚子树信息和,我们把这个信息与他自己的信息合并,我们就得到了他在原树中的子树信息。 考虑一个点的虚子树信息会在什么情况下发生改变,原创 2017-08-18 14:03:59 · 441 阅读 · 0 评论 -
BZOJ2631:tree(LCT)
传送门题意: 支持一颗动态树,可以路径乘,加。题解:LCT乘一个点只需要把addtag乘,pushdown的时候先pushdown乘的标记就行了。#include<bits/stdc++.h> using namespace std; typedef unsigned int uint; struct IO{ streambuf *ib,*ob; inline void init(原创 2017-09-27 08:57:46 · 308 阅读 · 0 评论 -
BZOJ3091: 城市旅行(LCT)
传送门题意 给一颗动态树,支持路径查询和修改。题解 LCT,打标记时注意先更新再下传。 Code #include<bits/stdc++.h> using namespace std; typedef long long ll; const int Maxn=5e4+50;inline ll read() { char ch=getchar();ll i=0,f=1; whil原创 2017-08-19 08:34:12 · 351 阅读 · 0 评论 -
BZOJ3669: [Noi2014]魔法森林(LCT)
传送门题意 给一个无向图,每个边上有边权ai,bi,求一条路径,使得max(ai)+max(bi)最小。题解 将a值排序后LCT暴力加边维护关于b值的最小生成树。注意有一点是LCT不能维护边上的权值,只能维护点上的权值,所以要将每条连边上加一个点,Splay顺便维护最大值即可。 Code #include<bits/stdc++.h> using namespace std; const int原创 2017-08-18 16:03:11 · 339 阅读 · 0 评论 -
bzoj2002: [Hnoi2010]Bounce 弹飞绵羊(lct)
Description某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到第i+ki个装置,若不存在第i+ki个装置,则绵羊被弹飞。绵羊想知道当它从第i个装置起步时,被弹几次后会被弹飞。为了使得游戏更有趣,Lo原创 2017-04-05 21:10:39 · 260 阅读 · 0 评论 -
bzoj1180: [CROATIAN2009]OTOCI(lct)
Description给出n个结点以及每个点初始时对应的权值wi。起始时点与点之间没有连边。有3类操作: 1、bridge A B:询问结点A与结点B是否连通。如果是则输出“no”。否则输出“yes”,并且在结点A和结点B之间连一条无向边。 2、penguins A X:将结点A对应的权值wA修改为X。 3、excursion A B:如果结点A和结点B不连通,则输出“impossible”。否则输原创 2017-04-05 19:43:17 · 245 阅读 · 0 评论 -
bzoj2049: [Sdoi2008]Cave 洞穴勘测(lct)
Description辉辉热衷于洞穴勘测。某天,他按照地图来到了一片被标记为JSZX的洞穴群地区。经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴。假如两个洞穴可以通过一条或者多条通道按一定顺序连接起来,那么这两个洞穴就是连通的,按顺序连接在一起的这些通道则被称之为这两个洞穴之间的一条路径。洞穴都十分坚固无法破坏,然而通道不太稳定,时常因为原创 2017-04-05 16:13:11 · 247 阅读 · 0 评论 -
NOIP2018:保卫王国(LCT)
传送门 题解: 考场上刚T2导致这道题没写。。。 其实挺傻逼的。 LCT的时候维护一个2*2的矩阵就行了,顺便维护一下虚子树的信息,时间复杂度O(nlogn)O(n \log n)O(nlogn)。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int RLEN=1<<...原创 2018-11-12 11:31:21 · 2371 阅读 · 1 评论