
splay&&LCT
文章平均质量分 80
IED98
这个作者很懒,什么都没留下…
展开
-
BZOJ 2002 弹飞绵羊 Link-Cut-Tree(LCT)
首先这个序列从右往左捋一下肯定是一棵树。错了不对,是一颗森林。而第二个操作可以随时改变这棵森林的结构于是这道题很明显是动态树结构中的Link-Cut-Tree。关于LCT的概念网上有很多 这里只列出一个关键点就是如何找到链顶的父节点其实虽然这个算法的实现方式是对每一条重链(想不出名字来了,就沿用轻重链剖分的名字吧)维护一棵Splay,但实质上每一原创 2015-02-05 15:26:27 · 849 阅读 · 0 评论 -
bzoj1500: [NOI2005]维修数列
今天比较闲所以把这个题拿来练练手。从晚9点写到12点半然后改到凌晨2点终于改完。。。。最后还被大神说是写得快的了 说byvoid大神写了两个早上加一个下午。。。。前几个操作都很简单之接搞就可以了。对于最后一个操作我们可以用类似于线段树区间合并的标记来做。lmax和rmax,mmax表示左边区间以左开头和以右结尾和中间的最大和。rever后记得要swap(lmax,rmax)哟,还有要用一个原创 2015-02-14 23:09:49 · 729 阅读 · 0 评论 -
bzoj2631: tree LCT
LCT基本操作。用long long竟然会被卡常数。。。unsigned int 好。pushdown递归写果然比较快。。。维护sum(总和) mul(倍数) add(加的值) val(每个点的值) siz(子树大小)即可。#include #include #include #include #include using namespace std;#define max原创 2015-02-18 17:12:40 · 519 阅读 · 0 评论 -
bzoj3669: [Noi2014]魔法森林 LCT
题解:暴力的想法是枚举a的上界,做b的最小生成树。而且有一个比较显然的性质是:如果可以在一个生成树中加入一条边,使得树的总权值更小,那么一定是(设这条边连接 x,y)x--y原路径上的最大权值删掉这条边,加上新边。那么我们只需要用LCT,维护点与点之间的最大权值,将边以a排序,一条一条试图往里面加即可。如果x,y不连通直接加入,否则按上述查询x,y的最大值,比较。然后每原创 2015-02-20 10:42:59 · 685 阅读 · 0 评论 -
bzoj2049: [Sdoi2008]Cave 洞穴勘测 LCT
由于并查集无法拆边所以考虑用LCT。询问的话首先把x移到LCT的根再把y和根联通。由于无法确定深度,所以两个都要往上遍历。#include #include #include #include #include using namespace std;#define maxn 200010inline int getint(){ int x=0,f=1;char ch=ge原创 2015-02-17 20:13:51 · 531 阅读 · 0 评论 -
bzoj1493: [NOI2007]项链工厂 splay
这个题。。。。知道用线段树可我还是用splay了。。。然后整个人就splay了。。。几种操作基本上都是基本操作,对1旋转就是把2~n翻转。顺时针旋转就k 就是把后k个插到钱面去。然后此题pushup的时候要注意 如果没有左子树或右子树,那么这个点的字区间的左端或右端颜色就是当前点的颜色。第二发长达300行的码。。。号称此题最好看的splay。。。。。#include #include原创 2015-03-20 10:15:36 · 990 阅读 · 0 评论 -
bzoj2594: [Wc2006]水管局长数据加强版
离线处理后不难发现就是一个LCT询问两点间最大值最小值之类的,然后就上模板#include #include #include #include #include using namespace std;int getint(){ char ch = getchar(); for ( ; ch > '9' || ch < '0'; ch = getchar());原创 2015-07-13 12:47:25 · 1101 阅读 · 0 评论 -
bzoj3323: [Scoi2013]多项式的运算 splay
对于多项式的每一项 我们可以建一个节点记录其系数。然后这题就成了裸地模板题。求值操作直接o(n)搞。#include #include #include #include #include using namespace std;#define maxn 1000000+100#define maxm 100000+100#define INF 0x3f3f3f3f#defi原创 2015-07-13 12:29:55 · 642 阅读 · 0 评论 -
bzoj2733: [HNOI2012]永无乡 splay+启发式合并
正解不是splay,但标解是splay+启发式合并。所谓的启发式合并就是把size小的往大的splay上加,复杂度是nlog2n。由于无需知道根所以直接看此节点有没有父亲节点就可以判断是不是根。#include #include #include #include #include using namespace std;#define maxn 120110int fa[max原创 2015-02-07 20:47:12 · 769 阅读 · 0 评论