这几天做了十几道LCT的题,板子打了二十几遍,快要吐了.
大部分较难的题都可以在:这里 找到
呕心沥血总结出了大概几种套路的方法:
这种只要记好tag,每次splay记得下放就好了
就类似[SHOI2014]三叉神经树,shi.这两道题,就是要你维护子树上的信息,这时候要注意在acs的时候考虑变化右儿子的影响,如果有取出一条链这种操作,或者换根,并且信息是沿着深度传递的,也就是说在splay里面是有左右儿子信息之分的,基本都要维护两个方向的东西,以便mkrt的时候交换,复杂的标记下传直接写个atg函数,不要麻烦自己.
很多题LCT实际上起到的是辅助的作用,可以通过发现题目中满足条件的边权是可以two-pointers的,或者一些题目中边权是满足贪心关系的,又或者一条边只在某个时间段出现的,都可以在外层套其他的算法来解决,比如说two-pointers,线段树分治等
这个不怎么好做,大致的做法只能通过顺带维护一个ETT来达成,而且时间复杂度极慢,因为每次acs treap是不满足性质的,所以时间复杂度变成了两个log,目前只会口胡,写这个感觉意义不大,主要还是了解ETT的思想吧.
LCT本身是没有这种用处的,但是这个"实虚边切换"的思想,却深入骨髓,比如[ZJOI2018]历史
维护可离线的动态图连通性,维护动态直径等