
动态树
文章平均质量分 64
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
link cut tree学习小记
动态树就是动态的树链剖分,可以用来维护森林。 link cut tree本蒟蒻很早就学过,一直没有打过(自己太颓了太没决心了),最近迎接WC就去码了一波。基本概念类似树链剖分,有重边与轻边,有重链。 其中,树链剖分采用线段树来维护重链,而动态树一般使用splay来维护重链(维护重链的数据结构被称为辅助树,本学习小记中统一把splay当作辅助树)。 注意如果一个点与其所有相连的点间的边都是轻边那原创 2016-01-15 20:18:35 · 862 阅读 · 0 评论 -
绝版题
题目描述所谓的考试,就一定有一道绝版题使得男人沉默女人流泪,而不有理有据的绝版题怎么称得上绝版呢? 火车国一开始只有一座城市,也就是1号城市。不过火车国的领土是在不断变化的,经常会新添加一个城市,那么小火车就会用一条铁路把它和某个老城市连接起来。 偶尔火车国会发生自然灾害,那么小火车就得找到一个合适的城市指挥赈灾,这个城市满足所有城市到其距离乘以城市人口的和最小,如果有不止一个最小的城市时小火车原创 2017-05-04 15:45:02 · 520 阅读 · 0 评论 -
[bzoj4825][HNOI2017]单旋
题目描述H 国是一个热爱写代码的国家,那里的人们很小去学校学习写各种各样的数据结构。伸展树(splay)是一种数据 结构,因为代码好写,功能多,效率高,掌握这种数据结构成为了 H 国的必修技能。有一天,邪恶的“卡”带着 他的邪恶的“常数”来企图毁灭 H 国。“卡”给 H 国的人洗脑说,splay 如果写成单旋的,将会更快。“卡”称 “单旋 splay”为“spaly”。虽说他说的很没道理,但还原创 2017-04-19 16:04:38 · 1316 阅读 · 0 评论 -
[WerKeyTom_FTD的模拟赛]Sone0
题目描述有一颗n个节点的树,每个节点有编号与权值。有m次操作,每种操作都有独特的编号。 编号为1的操作,会切断当前树上存在的一条边,并新加一条边,保证操作完成后仍然是树。 编号为2的操作,会改变这颗树的根节点(初始根节点为1)。 编号为3的操作,会给树上一条路径上所有点的权值都增加x。 编号为4的操作,会对树上一条路径上点的权值信息进行轮换,如果是对j到k这条路径操作,从j走原创 2017-04-06 09:28:08 · 3333 阅读 · 6 评论 -
[bzoj4573][UOJ#195][ZJOI2016]大森林
题目描述小Y家里有一个大森林,里面有n棵树,编号从1到n。一开始这些树都只是树苗,只有一个节点,标号为1。这些树 都有一个特殊的节点,我们称之为生长节点,这些节点有生长出子节点的能力。小Y掌握了一种魔法,能让第l棵树 到第r棵树的生长节点长出一个子节点。同时她还能修改第l棵树到第r棵树的生长节点。她告诉了你她使用魔法的 记录,你能不能管理她家的森林,并且回答她的询问呢? 第一行包含 2 个正原创 2017-02-23 14:32:44 · 2676 阅读 · 0 评论 -
[UOJ#207]共价大爷游长沙
题目大意一颗会动的树。 有一个点对集合会变。 每次询问一条树边,问集合内所有点对之间的路径是否都经过该边。维护虚边信息的LCT终于无聊来补了这题 每个点对随机一个10^9内的权值 然后给两端点的点权分别异或给权值。 询问一条边是否被全部经过,就是询问每个点对是否都被这条边分开。 那么比如这条边是(u,v),断开后u的子树异或和应该要等于当前所有路径权值异或和。 就可以判了,出错率当然是原创 2017-02-21 15:00:42 · 1096 阅读 · 0 评论 -
Ztxz16学图论
题目大意给定一张图,每次询问编号在[l,r]的边连上后会形成多少联通块。离线做法我们考虑莫队。 考虑左端点所在的每一块,左端点到块末最多根号的距离,右端点是单调的。并查集容易添加,因此只保留块末到右端点的联通情况,每次暴力加上块末到左端点部分。在线做法把加入1~i条边,每条边权值设置为编号,所形成的最大生成树叫第i个版本。 [l,r]的答案=第r个版本中联通块数量+第r个版本中[1,l-1]存在原创 2016-09-04 07:49:03 · 916 阅读 · 0 评论 -
冷战
题目大意有两种操作,添加一条边或者询问两点在哪次操作后联通。 强制在线。辣鸡LCT一条边的权值是其的加入时间。 询问操作便是询问路径上的最大值。 我们不会维护边权,因此可以把边变成的点,向两端连边。 愉快被卡常。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace st原创 2016-07-07 20:36:07 · 618 阅读 · 0 评论 -
共价大爷游长沙
题目大意有一棵树,会改变它的形态。 有许多路径,路径集合会被更改。 询问操作是询问一条边是否被所有路径经过。题解给每条路径随机一个权值,并给这条路径的两个端点点权异或上这个权值。 用LCT维护形态信息以及子树点权异或和。 这个涉及虚边信息维护,具体可以看首都 检查一条边是否被所有路径经过,如果切掉这条边,以该边两个端点为根的两颗树子树异或和都等于所有路径异或和那么即被所有路径经过。 因为原创 2016-06-26 11:09:15 · 1201 阅读 · 0 评论 -
[bzoj3510]首都
题目大意一开始有n个结点,没有边。 有三种操作:将两个结点间连一条边,并且保证两个结点属不同联通块。询问一个联通块中所有点到其距离和最小的点。询问所有联通块中所有点到其距离和最小的点的异或和。启发式合并显然是一片森林,要求维护重心。 可以用启发式合并的思路,把小的合到大的里面,然后调整原本大的树里的重心,显然这个重心只会朝着小树方向调整,而且最多移动小树大小步。 然后需要用LCT来维护森林,并原创 2016-05-21 15:54:02 · 1352 阅读 · 0 评论 -
动态树问题
前言当一类题目中的树需要支持换根、加边、删边的这些操作时,会改变树的形态,并要求维护一些信息,这类问题称为动态树问题。link cut tree这里有我写的学习小记 link cut tree学习小记 支持的功能:换根,加边,删边,链上信息维护。 不支持的功能:子树信息维护。 习题:弹飞绵羊,魔法森林,substring。euler tour tree我不知道真正的ETT怎么打,我将它理解为原创 2016-05-09 20:40:53 · 1188 阅读 · 0 评论 -
[bzoj2555]SubString
题目大意要求兹瓷两个操作 1、在字符串后插入字符串变为新的字符串 2、询问字符串内某字符串的出现次数LCT维护SAM对于询问字符串出现次数而且要兹瓷在尾部添加字符,容易想到是SAM,根据pre指针建树,然后用LCT维护这颗pre树即可。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(i=a;原创 2016-03-09 18:18:43 · 1160 阅读 · 0 评论 -
[bzoj3669][NOI2014]魔法森林
题目大意给定N个点M条边的无向图,每条边有两个权值a与b。求一条1到n的路径使得路径经过边的最大a与最大b的和最小。无法到达输出-1。 n<=50000,m<=100000。思想我们尝试枚举路径的最大a值,那么我们只需按照a排序按顺序插入,维护1到n的b最大值即可。 用并查集维护连通性。当加入j到k这条边时如果形成环,则删除环上的最大值。 我们用动态树来进行维护。 为了实现更易,将每条边看做原创 2016-01-14 22:02:41 · 1018 阅读 · 0 评论 -
[bzoj1036]树的统计
题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v原创 2016-01-14 22:11:28 · 899 阅读 · 0 评论 -
[bzoj2002]弹飞绵羊
题目大意有N个点,每个点有一个系数a[i],你处于位置i可以走到i+a[i],若i+a[i]>n则你走出了地图。现M个操作有两种:1、把a[j]修改为k。2、询问你位于点j时,需要走多少部走出地图。n<=2*10^5,m<=10^5。LCT裸题我们可以转化为如下问题:1、将x的父亲设为y。2、询问x的深度。 那就变成了LCT裸题,为了支持询问操作只需要维护size即可。 这个方法我还没有打,因为原创 2016-01-17 14:46:37 · 782 阅读 · 0 评论 -
没有上司的舞会
题目大意动态加子节点的树,每次询问最大独立集大小。DP给平衡树每个点x维护一个f[x,0/1,0/1]表示以x为根的这个平衡树区间在原树上对应的部分(包括连出去的虚子树)的最大独立集是多少,且这个平衡树区间的左端和右端选或不选。 然后就很好做了。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)usin原创 2017-06-22 20:43:26 · 489 阅读 · 0 评论