LCT
LowestJN
强省弱OIer
展开
-
[BZOJ3669][UOJ#3][Noi2014][LCT]魔法森林
题意求一条从1到N的路径,使路径上每条边A权值的最大值和B权值的最大值和最小。刚开始写的暴力。 把边按A权值升序排序,每次操作加边,每次加边后用spfa维护图中的路径信息(可以不清空dis数组,这是个优化),这样可以暴力跑过去……还特别快……#include <cstdio>#include <string>#include <cstring>#include <iostream>#inc原创 2017-02-04 20:46:10 · 442 阅读 · 0 评论 -
[动态维护图连通性] LOJ#122. 【强制在线】动态图连通性
学一发黑科技给边设一个权值,对每一种权值 iii 维护权值大于等于 iii 的边构成的最大生成树 TiTiT_i加边 一个边刚被加入时的权值设为0,如果它连接两个联通块,就把它设为树边,否则设为非树边删边假设要删除边 (x,y)(x,y)(x,y),设它的权值为 www如果它是一条非树边,直接删去,否则要找一条边替代它。显然替代它的边的边权小于等于 www设删掉这条边...原创 2018-01-17 17:26:19 · 11107 阅读 · 1 评论 -
[BZOJ2555][LCT][后缀自动机]SubString
题意给定一个初始字符串,要求支持两种操作,往字符串后加一个字符串和求一个字符串的出现次数。可以对字符串建后最自动机,那么一个子串x的出现次数就是|right(x)|, |right(x)|可以用fail树维护。 那么每次往字符串后面加字符串,暴力维护|right(x)|时间复杂度会被卡成O(n^2)。 这时候就要用LCT来维护了所以复杂度就变成O(nlogn)(虽然感觉LCT的复杂度很玄学,但原创 2017-02-05 22:25:27 · 356 阅读 · 0 评论 -
[GCD最大生成树 LCT] HDU5398 .GCD TREE
可以发现只要保留边 (i,j)(i,j) 其中 ii 整除 jj 的边就行了用LCT来维护最大生成树就可以了#include <cstdio>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int N=1500010;int n,cnt,m;struct iedge{原创 2017-10-23 15:06:20 · 618 阅读 · 0 评论 -
[LCT] BZOJ2759.一个动态树好题
把 pip_i 设为 ii 的父亲,这样会变成一个基环森林可以发现一个点有解当且仅当这个店所在联通块存在环对于环,可以任取一点作为根,根原本的父亲看做一条特殊的边。那么用LCT可以维护出一个点与这个点所在联通块的根的关系,也就是xi=k×xrt+bx_i=k\times x_{rt}+b,其中 kk , bb是用LCT维护出的值。那么可以根据根与根的父亲的关系求出根的值,然后就可以求出这棵基环树上任原创 2017-09-28 10:22:32 · 410 阅读 · 0 评论 -
[LCT] BZOJ4817.[Sdoi2017]树点涂色
如果将相邻的两个颜色相同的点之间连实边,不同的连虚边,那么答案就是子树中虚边的数量每次染色就是虚实边之间的转换就跟LCT一样,那么LCT access的时候处理一下就可以了。#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int N=100010;struct NODE{原创 2017-09-28 10:13:32 · 294 阅读 · 0 评论 -
[LCT维护树的权值与形态]BZOJ3159.决战
题解可以看Manchery博客#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>using namespace std;typedef long long ll;const int N=50010;struct VT{ struct NODE{ NODE *ch[2],*f原创 2017-09-27 21:45:30 · 455 阅读 · 0 评论 -
[LCT && 主席树] BZOJ3514 .Codechef MARCH14 GERALD07 加强版
挺套路的题 如果我们对所有联通块取一棵生成树 那么联通块个数是点数减去边数(因为一棵树的点数-边数=1) 那么题目就是求这个区间里的边构成的图的生成树的边数以加入的时间为权值,用LCT维护最大生成树,如果一条边加入图中会形成环,那么肯定要把这两点间的最小边删去后再加入边,设最小边权为k,那么就是要把1~k的边都删去后这条边才会存在在生成树上。 用主席树维护和查询就好了#include <cs原创 2017-09-18 21:39:15 · 524 阅读 · 0 评论 -
[LOJ#2289 && BZOJ5020][THUWC 2017]在美妙的数学王国中畅游
终于找到一个可以交的地方了… 考场上只写了LCT的60分暴力,因为那时候并看不懂什么泰勒展开…前段时间学了微积分,学了泰勒展开,大概知道了是怎么回事 其实题目说的很清楚了…但是那时候就是看不懂,也不会求导什么的。讲sin(ax+b)\sin(ax+b),eax+be^{ax+b}和ax+bax+b在x=0处展开可以得到: sin(ax+b)=sin(b)+acos(b)x1!−a2sin(原创 2017-07-02 18:25:59 · 1113 阅读 · 2 评论 -
[BZOJ4573][UOJ#195][Zjoi2016][LCT][离线]大森林
http://blog.csdn.net/lych_cys/article/details/53515748# 神想法啊… 至于求两点间距离为什么不能直接把两点的链拉出来 可以考虑因为树上虚点,两个点的LCA可以是一个虚点,虚点的父节点才是它们真正的LCA,所以直接拉一条链会导致少算一个点,而算LCA的话不会有这个问题(可以脑补一下)#include <cstdio>#include <io原创 2017-03-29 17:58:10 · 917 阅读 · 0 评论 -
[BZOJ3510][启发式合并][LCT维护子树信息]首都
题意略…(今天比较懒)由于只有建造公路没有破环公路,所以可以用启发式合并保持操作数为log,暴力拆开小的联通块,用LCT插到大的联通块内,然后用LCT维护子树信息,具体看这里#include <cstdio>#include <iostream>#include <algorithm>#define N 300010using namespace std;int n,m,rt[N],g[N],原创 2017-02-15 18:41:54 · 1003 阅读 · 0 评论 -
[BZOJ4025][LCT]二分图
题意给定一张图,图中每条边只会在[l,r]的时间出现,询问1~T时刻该图是不是二分图LCT调了半天……当图出现奇环的时候不是二分图。因为是动态树,很容易想到用LCT维护,考虑如果加上一条边后形成环, 如果形成奇环,那么在这个环中最早消失的边消失前,这张图都不是二分图,因为LCT只能维护森林,所以把环中最早消失的边cut掉,记录下cut掉的边的编号,link上当前边 如果形成偶环,那么图依然是二分原创 2017-02-14 09:52:10 · 664 阅读 · 0 评论 -
[BZOJ2843][LCT]极地旅行社
LCT裸题#include <cstdio>#include <algorithm>#include <iostream>#define N 30010using namespace std;int n,m,tp,x,y;int A[N],fa[N],ch[N][2],v[N],rev[N],sta[N];char op[10];inline int isl(int x){return c原创 2017-02-13 14:19:59 · 375 阅读 · 0 评论 -
[BZOJ4530][Bjoi2014][LCT维护子树信息]大融合
LCT练习题第一次用指针打LCT,有蛮多意外的,不过确实感觉指针比数组打起来爽多了#include <cstdio>#include <iostream>#include <algorithm>#define N 100010using namespace std;int n,m,x,y,tp,f[N],tot[N],G[N];char op;struct lef{ lef *fa,*c原创 2017-02-16 17:02:23 · 621 阅读 · 0 评论 -
[BZOJ2594][Wc2006][LCT]水管局长数据加强版
题意给一张图,每次操作或询问所有u到v路径上边权最大值的最小值,或删除一条边离线,反过来操作,删边变成加边,用LCT维护图的联通就行。#include <cstdio>#include <iostream>#include <algorithm>#include <map>#include <iostream>#define N 1000010using namespace std;typ原创 2017-02-05 19:13:13 · 447 阅读 · 0 评论 -
[BZOJ3282][LCT]Tree
题意对于一张无向图,需要你支持加边,删边,求路径疑惑和,修改权值四个操作真丶LCT裸题#include <cstdio>#define N 300010int n,m,op,x,y,tp;int v[N],w[N],f[N],ch[N][2],rev[N],sta[N];inline void reaD(int &x){ char Ch=getchar();x=0; for(;C原创 2017-02-04 23:32:31 · 315 阅读 · 0 评论 -
[BZOJ1180][CROATIAN2009][LCT]OTOCI
LCT裸题吧….就是没有cut而已#include <cstdio>#define N 50010int n,m;int v[N],f[N],ch[N][2],rev[N],fa[N],t[N],sta[N],tp;char op[20];inline char C(){ static char buf[100000],*p1=buf,*p2=buf; if(p1==p2){原创 2017-02-04 22:36:32 · 398 阅读 · 0 评论 -
[LCT] WC2018. 即时战略
之前询问得到的树用LCT维护,然后每次询问从根开始询问询问次数和复杂度都是 O(nlogn)O(nlogn)O(n\log n) 的UPD:被HACK了#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <cs...原创 2018-02-11 13:31:10 · 668 阅读 · 0 评论