LCT
gjghfd
这个作者很懒,什么都没留下…
展开
-
bzoj2631 -- LCT
包含了link、cut、update、query操作。更新时类似线段树就可以了。代码:#include#include#includeusing namespace std;#define N 100010#define M 51061#define ll unsigned intinline char nc(){ static char buf[100000],*原创 2017-05-26 16:43:56 · 182 阅读 · 0 评论 -
bzoj2843 -- LCT
对于修改,将其splay到根再修改。对于查询x,y路径上的权值和,先将x换到根,再access(y)、splay(y),sum[y]就是答案。代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 inline char nc(){ 6 static char buf[100000],*p1=buf,*原创 2017-05-26 16:43:19 · 194 阅读 · 0 评论 -
bzoj2049 [ SDOI2008 ] -- LCT
只有cut和link操作的LCT代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 10010 6 int i,j,k,x,y,n,m,f[N],ch[N][2]; 7 bool r[N],b[N]; 8 char c[30]; 9 inline void Update(int x)原创 2017-05-26 16:43:16 · 220 阅读 · 0 评论 -
bzoj2002 [ HNOI2010 ] -- LCT
考虑建一棵树,对于一个点i,如果i+kii作为它的父亲。那么答案就是这个点的深度。由于有修改操作,用LCT维护这棵树,每个修改操作改变父节点就可以了。代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 200010 6 int i,j,k,n,m,T,f[N],ch[N][2],s[N]原创 2017-05-26 16:43:08 · 286 阅读 · 0 评论 -
bzoj2555 -- 后缀自动机+LCT
构建出后缀自动机后在自动机上找到strstr在failfail指针构成的树中的位置,子树大小就是答案。 我们可以用LCT维护后缀自动机,添加字符时链上修改就可以了。 时间复杂度O(|S|log|S|)O(|S|\log |S|)原创 2017-07-04 17:21:07 · 251 阅读 · 0 评论 -
codeforces813F Bipartite Checking -- LCT+分治
传送门题目大意:给你一个有nn个顶点的无向图,初始时没有边,有qq个操作,每个操作加入或删除一条边,要求每次操作后输出这个图是否是二分图。显然一个图是二分图的充要条件是不存在长度为奇数的环。 对于图中可能出现的每条边,记录它出现的某些区间,然后考虑分治。 Solve(l,r,U)Solve(l,r,U)表示处理[l,r][l,r]的答案,其中UU表示出现区间在[l,r][l,r]内的边的集合。原创 2017-07-24 16:37:03 · 656 阅读 · 0 评论 -
bzoj3159 -- LCT
因为LCT只能将路径上的点翻转而不是权值,所以不能直接用LCT做。 考虑再建一棵LCT维护权值。 查询原Splay第k个数的权值时在第二棵Splay中查找。 进行翻转操作直接将第二个LCT翻转就可以了。代码#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;原创 2017-09-27 18:12:00 · 268 阅读 · 0 评论 -
bzoj2759 -- LCT
神题题解#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;#define N 30010#define M 10007struct Node{ int k,b; Node(int k=0,int b=0):k(k),b(b){} No原创 2017-09-28 09:32:17 · 257 阅读 · 0 评论 -
[ LCT 并查集 ] BZOJ4998
和长跑那题一样。将双联通分量用并查集缩起来就好了。#include#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,原创 2018-01-08 16:31:00 · 301 阅读 · 0 评论