LCT
Loi_a
这个作者很懒,什么都没留下…
展开
-
LCT学习笔记
动态树问题: 动态加边,删边,始终保持是一棵或多棵树。 支持换根,修改点、边、路径权值(等信息),查询路径权值等。思想:把树分成若干个部分维护。和树链剖分相似,树链剖分的一些题目也可以用LCT来做。LCT的均摊复杂度是log²n,杨哲的论文(百度搜一下,%大神)有证明,但我太弱,看不懂,也不想研究……一些定义: access(x) :访问x,这个操作是LCT关键; Preferred ch原创 2016-09-28 10:41:48 · 693 阅读 · 2 评论 -
bzoj 1180 [CROATIAN2009]OTOCI - LCT
20分钟码完,手速++; 不过这道题正解是LCT吗,感觉很奇怪啊。#include<iostream>#include<cstdio>#define maxn 30005using namespace std;int fa[maxn],ch[maxn][2],rev[maxn];int sum[maxn],v[maxn];bool dir(int x){return x==ch[fa原创 2016-09-28 11:29:24 · 376 阅读 · 0 评论 -
bzoj 2002 弹飞绵羊 LCT
先吐槽一句,这题分块比LCT快是什么鬼,LCT常数是有多大。LCT1.8s,分块总耗时1.6s。 主要思路:link(i,i+a[i]);弹出去的都连向节点n+1; 每次修改cut,link。查询是 以n+1为根,access(x),splay(x),x的子树大小,就是x点向后弹的节点数。#include<iostream>#include<cstdio>#include<algorithm原创 2016-09-28 19:04:35 · 442 阅读 · 0 评论 -
bzoj 3282 Tree 动态树LCT
学了一天LCT,还是不太明白,打(抄)了一个模板,先存着。#include<iostream>#include<cstdio>#include<algorithm>#include<stack>#define maxn 300005using namespace std;inline void read(int &a){ a=0;char c=getchar(); wh原创 2016-09-27 15:30:30 · 490 阅读 · 0 评论 -
bzoj 2631 tree LCT+标记处理
这个题目名字好大众啊。 从昨天下午开始码,刚调出来。 由于LCT常数很大,一定要丧心病狂的优化常数,非常管用。#include<iostream>#include<cstdio>#define LL unsigned int#define P 51061#define maxn 200005using namespace std;int n,q;int fa[maxn],ch[ma原创 2016-09-28 08:15:00 · 442 阅读 · 0 评论 -
hdu 2475 box LCT
题意是箱子套箱子,每次移动箱子x到箱子y里,或询问x最外层的箱子。 这一道题根是固定的,不能换根。#include<iostream>#include<cstdio>#include<cstring>#define maxn 50005using namespace std;int fa[maxn],ch[maxn][2];int f[maxn];bool isroot(int x)原创 2017-01-01 10:56:45 · 441 阅读 · 0 评论 -
hdu 4010 LCT
注意标记下放时,子节点不为零时再下放,不然统计的时候会出问题……#include<iostream>#include<cstdio>#include<cstring>#define maxn 300005using namespace std;int fa[maxn],ch[maxn][2];int val[maxn];int Max[maxn],add[maxn];struct l原创 2017-01-01 15:15:35 · 446 阅读 · 0 评论