LCT
Deep_Kevin
我太弱了
展开
-
专题总结:LCT
正题 这几天做了十几道LCT的题,板子打了二十几遍,快要吐了. 呕心沥血总结出了大概几种套路的方法: 简单的路径修改,询问 这种只要记好tag,每次splay记得下放就好了 复杂的单点修改,路径,子树询问 就类似[SHOI2014]三叉神经树,shi.这两道题,就是要你维护子树上的信息,这时候要注意在acs的时候考虑变化右儿子的影响,如果有取出一条链这种操作,或者换根,并且信息是沿着深度传递的,也就是说在splay里面是有左...原创 2020-09-02 20:41:46 · 165 阅读 · 0 评论 -
[ZJOI2018]历史,洛谷P4338,类LCT维护
正题 题目大意,大致就是给出一棵有根数,给出每个点access的次数,要你安排顺序,求轻重边切换最多多少次,动态加次数. 第一步其实还挺好想的,思考一下如何静态做,发现相当于对于每一个节点,就是让各个子树的权值和 和 自己的access次数互插,使得相邻两个不同的个数越多越好,这个东西想一想就可以知道答案是,其中x是最大的个数,具体怎么得来,可以直接分类讨论(x>n/2 x=n/2 x<n/2)三种情况,笔者不多赘述. 第二步才是有意思的地方,我们可以在...原创 2020-09-02 20:19:40 · 225 阅读 · 0 评论 -
[ZJOI2012]网络,洛谷P2173,LCT
正题 为了方便可以用一个数组指针来代替传参. 在处理回答的时候要多注意,如果删不掉一条边记得加上,%%%Nacly_Fish提供的数据#include<bits/stdc++.h>using namespace std;const int N=10010;#define mod 51061struct node{ int son[2],fa,val,mmax,t; bool swp;}now[10][N];node *s;int n,m,C,...原创 2020-09-02 20:09:04 · 119 阅读 · 0 评论 -
[SHOI2014]三叉神经树,洛谷P4332,LCT
正题 难度虚高 想一想就会做了,直接用ans[0/1]来维护将0/1放进当前点的splay的末端得出来的信息,那些非节点的权值和轻儿子的权值用一个tot来维护,acs的时候直接更改,upd就看看将0/1放进右儿子会有什么答案,然后再算自己,在丢到左儿子.代码比其他LCT的都短,因为不用换根,就少了dfs下放标记和psd.#include<bits/stdc++.h>using namespace std;const int N=1500010;struc...原创 2020-09-01 22:03:19 · 135 阅读 · 0 评论 -
[USACO18FEB]New Barns P,洛谷P4271,LCT维护直径
正题 比较蠢,没想到. 其实给两个联通块连一条边也是可以的,就是将两个联通块的直径端点两两求一次距离,求距离可以用LCT来维护点权,然后split一下-1就是距离了.再用一个带权并查集来维护两个直径端点就可以了.#include<bits/stdc++.h>using namespace std;const int N=100010;struct node{ int son[2],fa,tot; bool swp;}s[N];int a[N],b...原创 2020-09-01 21:58:41 · 270 阅读 · 0 评论 -
连环病原体,洛谷P4230,LCT+二维前缀和
正题 可以发现对于每一个l,找到最小的r,使[l,r]为一个加强区间,那么r是关于l单调不降的. 证明显然.那么我们就可以用LCT来two-pointers. 得到一个区间,考虑会对什么位置的ans产生贡献,发现可以对[l,r]中的ans贡献m-r+1,对[r+1,m]中的ans贡献一个首项为m-r,公差为-1的一个等差数列,如何区间加等差数列,二维前缀和即可,具体来说就是差分两次,转化为给4个位置加一个权值.#include<bits/stdc++.h...原创 2020-09-01 21:53:31 · 120 阅读 · 0 评论 -
[TJOI2015]旅游,洛谷P3976,LCT维护路径信息
正题 这题主要是用来练手的,只要维护一个mmin,mmax.再维护一个正着来的ans和一个倒着来的ans就可以了. 至于维护倒着的ans的原因就是当makeroot的时候要翻转整个区间,这时候直接翻转两个ans就可以了.#include<bits/stdc++.h>using namespace std;const int N=50010;struct node{ int son[2],fa,mmin,mmax,ans1,ans2,val,tag; ...原创 2020-09-01 21:45:47 · 137 阅读 · 0 评论 -
[AH2017/HNOI2017]单旋,洛谷P3721,模拟+维护
正题 还挺有意思. 手玩一下很容易就可以发现当一个最值spaly的时候只会更改O(1)个节点的关系,并且子树的深度不变,其余深度+1. 一直卡在怎么插入,看题解发现相当于在前驱和后继里面找一个深度最大的,这个很容易证明,首先前驱后继一定是当前点的祖先,因为这个点没有儿子,所以拍扁的时候前驱就是向上走第一个左父亲,后继就是第一个右父亲,深度谁大当然就谁当父亲了. 然后要维护深度的区间加,单点更改,单点查询,直接树状数组就可以.总结 这...原创 2020-09-01 21:33:20 · 125 阅读 · 0 评论