LCT
模板
题解:无
[HNOI2010]弹飞绵羊
题解:新建个虚拟节点,弹到虚拟节点就算被弹飞。
每次查询access一下即可。
[NOI2014]魔法森林(+最小生成树)
题解:考虑从小到大枚举a型精灵的数量,发现它恰好是一条边的边权。现在我们可以走的是边权<=现在a的边。
可得从1~n的代价(max值)最小的路径在MST上(货车运输的结论),所以问题转化为有加边操作的mst。
如果现在有最小生成树,每次加边会形成一个环,可以用lct找到环上代价最大的边且删去,由K氏法的结论可知一定正确。
边权可以新添额外点转成点权。
[ZJOI2016]大森林
题解:距离可以使用树上差分解决。也可以新添额外点但常数较大。
发现“区间长点”等于“全局长点”,因为不会询问到没有的点。
考虑离线询问,则问题转换为如何快速从任意的i的树推到i+1的树。
可以发现:第l棵树是第l-1棵树把这个1操作以后连在原来生长节点上的所有节点(以及所有子树)全部连到x上生成的树。
普通LCT不能支持这种操作,要建虚点(或者用ETT)
操作1可以把每个操作建一个虚点,后面所有0操作(直到下一个1操作)都连在这个虚点上,则这个虚点子树在修改生长节点时该被连到当前点。
lct上lca可以使用lct的性质求得:先access(x),再access(y),access(y)过程中最后一个跳到的虚边的父节点就是lca。
【雅礼联考GDOI2017模拟9.2】Ztxz16学图论(+线段树)
题解:先离线询问。把所有询问挂在右端点上。
每次维护一颗动态的树。树上每条边的权值是边的标号。并且维护一个数据结构,l~r的权值和为连通块个数。
每次在右移右端点时,从左扫到右端点的每一个后缀都会增加一条边,这条边可能会让一条原树边变为环边(权值最小的那条),可以使用lct找到这条边且删掉。同时在数据结构上修改。
查询直接查区间和即可。
边权可以变为点权
[SDOI2017]树点涂色 (+线段树,LCA)
题解:由于每次染的颜色都是不同的,所有一个颜色会行成一个连通块,且为一个深度递增的链。
发现这个涂色操作比较像lct的access操作。实际上,可以在lct上每个节点到与它相同颜色的儿子点(最多只有1个)连一条重边。由于每次染的颜色都是不同的,所以一个点到根的权值就是它到根节点的虚边个数。
可以维护一个数据结构,在lct上,虚实边如果切换,则在数据结构上子树对应的区间打+1/-1标记。
2操作可以树上差分然后3次单点查询。3操作可以线段树区间查询。
【GDOI2019模拟2019.2.23】字符串(+border理论,后缀自动机,线段树)
做的方式有点像树点涂色。
uoj349【WC2018】即时战略(+随机化)
[ZJOI2018]历史 (+树剖,贪心)
多项式
链分治
CF1208H red blue tree(未理解)
[SDOI2017]切树游戏
[ZJOI2019]Minimax搜索
动态dp模板
CF1010F Tree
fwt
模板
【GDOI2019模拟2019.2.15】石子游戏
CF1119H Triple
[ZJOI2019]开关
【GDOI2020模拟02.09】西行寺无余涅槃
石家庄的工人阶级队伍比较坚强