
LCT
romiqi_new
这个作者很懒,什么都没留下…
展开
-
[BZOJ3639][LCT]Qtree7
BZOJ3639和上题没啥区别吧就是多了个统计子树最大值,可以用splay或者multiset搞Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;...原创 2019-03-14 19:32:17 · 235 阅读 · 0 评论 -
[BZOJ4825][LCT]HNOI2017:单旋
BZOJ4825我们可以用一个set维护一下点的大小关系,那么修改只需要查一下前驱后继就行了然后旋转的话,推一下就可以发现只会影响fa[x]fa[x]fa[x]的左/右儿子,和rootrootroot的父亲,那就随便LCT一波,depdepdep用LCT也很好维护#include<bits/stdc++.h>using namespace std;inline int re...原创 2019-09-10 23:13:58 · 132 阅读 · 0 评论 -
[BZOJ2759][LCT][数学]一个动态树好题
BZOJ2759把每个i和p[i]连边实际上是要维护一个基环森林,一个环的方程就可以直接解对于一条路径上的方程,根据方程的线性性,我们可以合并这条路径上的方程得到一个关于路径两个端点的方程用LCT维护环就拆一条边,在这条边的起点记录一个special信息,始终把这样的点设为根,然后求解就先用exgcd求出根节点的解然后用LCT求出需要求的点的解修改都是单点修改,需要讨论下先看是不是根...原创 2019-08-28 11:07:06 · 123 阅读 · 0 评论 -
[BZOJ3514][LCT][主席树]Codechef MARCH14 GERALD07加强版
BZOJ3514手残把ls打成了rs调了一个晚上。。。wsmBZOJ的MLE弹出来的是CE???考虑从前往后加边,就不需要考虑r后面的边了关键是如何除去lll前面的边的影响如果一个图在某一时刻有了一个环,那么断开这个环上的任意一条边显然对连通性没有任何影响,反过来,如果加入一条边形成了一个环,那也没有任何影响如何表示加边成环的过程?设形成环时环上最小的边编号为xxx,新加入的边编号为n...原创 2019-08-26 21:19:24 · 188 阅读 · 0 评论 -
20190805校内模拟题解
T1:树上选一个包含根的连通块,求价格在给定范围内的最大价值(背包)n<=5e3,背包容量<=1e4SOL:任轩笛在2018年国集论文中写到的关于树上连通块的一个重要性质:dfs序的转移具体的,包含根的连通块可以这样表示:设当前点为v,dfs序为dfs[v],构造一个新图dfs[v]向dfs[v]+1连边,表示选择这个点,其他点任选dfs[v]向dfs[v]+siz[v]连...原创 2019-08-05 21:34:16 · 154 阅读 · 0 评论 -
[LCT]SCOI2018:tree
Description:在大小为 N 的树上,点从 1 到 N 标号,第 i 个点有权值 Ai,现在需要支持两 种操作:第一种操作格式为“1 U” ,表示询问从 U 出发的简单路径,经过的点权值 之和的最大值;第二种操作格式为“2 U V” ,表示将 U 的权值修改为 V。Data Range:对于 10%的数据,满足:1<=N<=1000,1<=M<=1000...原创 2019-07-27 16:06:45 · 318 阅读 · 0 评论 -
[LOJ121][线段树分治][并查集][LCT](离线可过)动态图连通性
LOJ121ETT是不可能ETT的,这辈子都不可能ETT的,所以就有了这道离线的直接上线段树分治+并查集就完了Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-'...原创 2019-06-19 20:19:20 · 287 阅读 · 0 评论 -
[BZOJ5212][LCT][树形DP][树链剖分]ZJOI2018:历史
BZOJ5212去年ZJOIDay1最可做的题吧和SDOI2017树点涂色类似,但是难在修改和查询方式最大值首先我们简化问题:给出树上每个点被access的次数,求最大的虚实边切换次数之和一个点会被其子树和它自己影响,所以有一个比较普遍的结论,一个点的切换次数如果是它兄弟里面最大的,且小于总和的一半,那就轮流切换,否则总会有一些切换是无用的所以就可以DP出一次的答案考虑修改,修改会影响...原创 2019-05-08 12:17:01 · 205 阅读 · 0 评论 -
[BZOJ2361][LCT]tree
BZOJ2631练习一下打标记LCT**要用UNSIGNED INT!!!!!!!!!!!LONGLONG 要T**Code:#include&lt;bits/stdc++.h&gt;#define int unsigned int#define mod 51061using namespace std;inline int read(){ int res=0,f=1;ch...原创 2019-03-05 20:32:47 · 137 阅读 · 0 评论 -
[BZOJ4573][LCT]ZJOI2016:大森林
BZOJ4573巧妙的思路:显然分别维护每棵树是不可能的,时间空间都无法接受所以换个想法,发现操作对于没换生长点时候的树都是一致的,所以可以直接改变一下策略,维护同一棵树然后考虑修改生长点,可以离线操作,先保存所有操作和询问,加点就加到它最近新建的点就好了Code:#include<bits/stdc++.h>using namespace std;inline int ...原创 2019-03-19 20:31:18 · 137 阅读 · 0 评论 -
[BZOJ3637][LCT]Qtree6
BZOJ3637LCT维护连通块的一个题一个简单的想法是直接两个LCT分别维护黑白森林,改变点的时候就把所有出边linkcut一下然而菊花图可以随便卡被卡的关键在于这个算法是以点的出度为时间复杂度瓶颈的,所以考虑一个和点的出度无关的算法树有一个性质,每个点可以有很多个儿子(上面那个算法被卡的关键),但是只有一个父亲(下面这个算法的实现基础),所以我们link cut只考虑一个点和其父亲的...原创 2019-03-14 18:27:29 · 153 阅读 · 0 评论 -
[BZOJ4817][LCT][线段树]SDOI2017:树点涂色
BZOJ4817分析:仔细看一下第一个操作像什么(看标题)那么我们在access的过程中把点x的原来的实儿子的子树权值+1,新的实儿子的子树权值-1(可以画图感性理解一下,挂在x下面的权值会+1,新的子树权值会-1)然后第二个操作就维护一个dep第三个操作就是查询子树dep最大值那么开一个线段树维护dep,用树上两点间距离公式来求就好了P.S.大家code的时候一定记得随时ctrl+s...原创 2019-03-14 15:36:42 · 118 阅读 · 0 评论 -
[luogu4219][LCT]BJOI2014:大融合
luogu4219简单的LCT,连边直接连,维护siz,查询就把两个端点的siz乘起来(luogu数据水了,BZOJ比较强,我被卡常了,准备看一下zxy推荐的小常数LCT改一下)Code:#include<bits/stdc++.h>#define ll long longusing namespace std;inline int read(){ int res=0,...原创 2019-03-15 07:08:00 · 102 阅读 · 0 评论 -
[BZOJ2002][LCT]HNOI2010:弹飞绵羊
BZOJ2002LCT板题:新建结点,如果被弹飞就把边连到这个点上然后就是简单的模板了Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;ch=g...原创 2019-03-04 16:45:56 · 109 阅读 · 0 评论 -
[BZOJ3091][LCT]城市旅行
BZOJ3091LCT简单题计算期望比较简单吧,都是平衡树基操但是BZOJ算总时间过了,单点有的我要跑1.5sCode:#include<bits/stdc++.h>#define ll long longusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;...原创 2019-03-14 11:04:03 · 286 阅读 · 0 评论 -
[LCT]洞穴勘测
哪里都有的题LCT模板Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;char ch=getchar(); while(!isdigit(ch)) {if(ch=='-') f=-f;ch=getchar();} while(isdigit(ch)) {re...原创 2019-01-19 12:03:45 · 118 阅读 · 0 评论 -
[BZOJ3669][LCT]NOI2014:魔法森林
BZOJ3669LCT板子题吧用类似于kruscal的想法,先对a排序加边,然后每次加入如果连通了两个连通块就直接加如果已经连通就查询一下原来的路径上的最大值删去就好如果某一步操作下1和n已经连通就更新答案Code:#include<bits/stdc++.h>using namespace std;inline int read(){ int res=0,f=1;c...原创 2019-03-04 19:57:21 · 135 阅读 · 0 评论 -
[CF1137F][LCT][树状数组]Matches Are Not a Child's Play
CF1137FLCT神题。。。首先三操作显然就是两个二操作然后我们考虑一操作会造成什么影响我们将权值最大的那个点看作根,一个点进行一操作后,他到根节点这条路径就会最后被删除,其他的点删除顺序不变,这很显然考虑这段链,一定是从原来的最大值那一头删到当前最大值这一头,那我们就把新的最大值作为根,这就很像LCT了所以我们把会从下到上按顺序删除的链看成实链,那么不同链之间的影响只与链上最大值有...原创 2019-10-06 17:07:58 · 253 阅读 · 0 评论