link cut tree
Icefox_zhx
这个作者很懒,什么都没留下…
展开
-
bzoj2049 [Sdoi2008]Cave 洞穴勘测(lct)
只有link和cut的裸题。原创 2018-01-31 16:40:31 · 231 阅读 · 0 评论 -
CF813F Bipartite Checking(lct,同bzoj4025)
动态加边删边,判断是否是二分图。同bzoj4025原创 2018-03-09 09:39:35 · 366 阅读 · 0 评论 -
CF603E Pastoral Oddities(lct维护虚边信息+set+kruskal)
题目大意:动态加边,定义合法边集为使得每个点度数均为奇数。边集的代价为权值最大的边的权值。每次加入一条边后问现在合法边集的最小代价。我们首先要发现一个结论:当且仅当一个连通图的点数为偶数时,存在合法边集。具体证明见官方题解。于是合法边集的判定标准现在变成了是否不存在奇数个点的连通块。如果给定一张图,我们怎么做呢?类似kruskal的做法,把边按权值从小到大排序,一直加边直到不存在奇数个点的连通块为止原创 2018-03-09 14:19:37 · 526 阅读 · 0 评论 -
bzoj3510 首都(lct维护虚边信息+树的重心性质)
首先关于树的重心的一些性质: 1.树的重心就是一个点,其所有的子树中最大的子树节点数最少。 2.根据树的重心,每棵子树的大小不超过n的一半。 3.树中所有点到某个点的距离和中,到重心的距离和是最小的,如果有两个距离和,他们的距离和一样。 4.把两棵树通过某两点相连得到一颗新的树,新的树的重心必然在连接原来两棵树重心的路径上。 5.一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置...原创 2018-03-02 23:44:47 · 412 阅读 · 0 评论 -
bzoj2843 极地旅行社(lct)
lct裸题。原创 2018-03-17 08:32:17 · 252 阅读 · 0 评论 -
hdu2475 Box(splay/lct)
这题好神呀。lct做法参见:传送门 这里说说splay做法。我们考虑一棵树的dfs序。进点x的时候记下x,出点x的时候记下x+n。则x的子树就是区间[x,x+n]。则操作1就相当于删除一个区间的数,然后把这一整个区间的数插入一个数的后面。x节点所在的根就是dfs序最前面的那个节点。然后就可以做了,不过需要奇怪的splay姿势【再见】原创 2018-03-04 00:16:34 · 341 阅读 · 0 评论 -
bzoj2555 SubString(SAM+lct)
支持在末尾加入一个字符串 查询一个字符串的出现次数 强制在线我们建出SAM,找到这个字符串,如果找不到直接返回0.这个节点的|Right|就是答案。因此我们需要动态维护|Right|.考虑我们构造的过程,把np连到parent树上之后,np到根的路径上的所有点都+1了。而用nq代替q时,需要把v[nq]变成v[q],然后还是np到根的路径上的所有点+1.我们可以用有根树lct来维护这个路径加法。原创 2018-03-24 21:47:35 · 271 阅读 · 0 评论 -
suoj33 诡异的交通(lct+stl)
orz sbw 题目传送门:portal原创 2018-03-21 23:06:15 · 306 阅读 · 0 评论 -
bzoj2759 一个动态树好题(数学+基环树lct)
我们先不考虑修改操作。如何求解一个n个方程的n元线性模方程组呢?我们可以用图论来做!把i的父亲设为pi,我们就得到了一个基环森林。对于每一个连通块,一定会有一个环,我们根据这个环就可以求解出一个方程的解,然后这整个连通块的解就都可以得到了。我们考虑如何动态维护这个东西,我们想到了lct。把每棵基环树的环拆掉一条边,我们就得到了一个森林。把拆掉的这条边的一端作为根,另一端记在根上,记作spfa[rt]原创 2018-04-05 18:52:32 · 429 阅读 · 0 评论 -
bzoj4229 选择(lct+并查集维护边双)
倒着做,加边,维护边双。 lct+并查集。类似:portal 见一次不会一次系列qaq原创 2018-04-27 14:52:36 · 404 阅读 · 0 评论 -
loj6038「雅礼集训 2017 Day5」远行(lct+树的直径)
维护一下树的直径,用lct动态维护两点间距离。原创 2018-04-28 13:10:11 · 310 阅读 · 0 评论 -
bzoj4736 温暖会指引我们前行(lct)
lct维护最大生成树即可。 好久没打打着好别扭的感觉qaq 药丸qaq#include <bits/stdc++.h>using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 400010inline int read(){ int x=0,f=1;char ch=getch...原创 2018-05-25 17:15:23 · 223 阅读 · 0 评论 -
bzoj5365 [Lydsy1805月赛]回文树(树上Hash+暴力)
因为字符随机,所以同样的字符很少,我们对于同样的字符内部暴力两两枚举,看x-&gt;y是不是一个回文串。 怎么看呢?蒟蒻我不会… 比赛时胡乱写了一个假的lct维护树上hash值。 一开始没维护sz,它过了…过了… 发现后改过,它RE了…缘来是我写挂了qaq 改对过了美滋滋,然而elijahqi巨佬告诉我你太naive了…你这样rev之后hash值根本不对…囧 然而过了,可能因为数据随机...原创 2018-05-27 22:29:56 · 508 阅读 · 0 评论 -
bzoj3786 星系探索(ETT)
ETT就是Euler Tour Tree,用平衡树来维护欧拉序。 而欧拉序可以写成很多形式: 1.The first way is to write down all edges of the tree, directed, in order of DFS. This is how ETT is defined on 2.The second way is to store vertices...原创 2018-06-14 10:05:35 · 443 阅读 · 0 评论 -
luogu3613 睡觉困难综合征(lct+贪心)
是bzoj3668的改编。 如果我们知道了每一位上取0和取1时的结果,我们就可以直接从高位开始贪心了。 于是每个节点维护一下每一位取0时的答案f0,每一位取1时的答案f1。考虑如何合并两个答案呢?记左边为a,右边为b,结果为res,则有 res.f0=(~a.f0&b.f0)|(a.f0&b.f1) res.f1=(~a.f1&b.f0)|(a.f1&b.f1) 脑补一下就好啦。 然后因原创 2018-03-08 23:27:25 · 336 阅读 · 0 评论 -
CF763E Timofey and our friends animals(线段树+并查集/lct+BIT/瞎搞)
官方正解给的是线段树+并查集,好毒瘤呀!写的我心神俱疲呀orz 我是每个节点维护左边K个点和右边K个点的连通性,还有连通块的个数。然后每次合并两个节点的时候,就暴力枚举K^2条边来并查集维护。再更新对结果的l和r。然后每次查询的时候就直接合并logn个节点即可。当节点的区间长度不足k时太毒瘤啦!【我写的简直太丑了】复杂度O(nlognk2+qlognk2)O(nlognk2+qlognk2)O(...原创 2018-03-15 11:40:12 · 1092 阅读 · 0 评论 -
bzoj3091 城市旅行(lct+数学)
记链x->y的长度为n,则答案的分母显然就是n*(n+1)/2,我们的问题在于维护分子。考虑每一个点对答案的贡献,就是v[i]∗i∗(n−i+1)v[i]*i*(n-i+1)这个东西怎么维护呢?我们维护ls=v[i]∗i,rs=v[i]∗(n−i+1)ls=v[i]*i,rs=v[i]*(n-i+1)即一个左起排名乘点权,一个右起排名乘点权。这两个东西怎么维护呢?ls[x]=ls[l]+ls[r]+原创 2018-02-21 12:55:38 · 317 阅读 · 0 评论 -
bzoj1180 [CROATIAN2009]OTOCI(lct)
因为没有删边操作,可以直接拿并查集维护连通性。为啥不能直接带权并查集呢?因为还有修改点权。#include #include #include using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 30010inline int read(){ int x=0,f=1;char ch原创 2018-01-31 17:14:55 · 346 阅读 · 0 评论 -
bzoj3669 [Noi2014]魔法森林(并查集+lct)
把所有边按a值从小到大排序。不断往里加边,维护连通性,如果成环,查询目前x,y路径上的b的最大值,如果我当前边的b比最大值还大,则肯定不往里加。否则替换掉最大的b值那条边,连通性不变。如果1和n已经联通,就更新答案,用目前1,n路径上的b的最大值+当前边的a值来更新。这样为什么是正确的呢?考虑你这次替换了一条边进去,分两种情况 1.这条边在目前1~n的路径上,则显然这条边的a值是最大的a值。原创 2018-01-31 18:13:47 · 476 阅读 · 0 评论 -
hdu4010 Query on The Trees(lct)
1.连边x,y 2.以x为根,删边y,fa[y] 3.路径加法 4.路径最大值。原创 2018-01-31 18:26:13 · 332 阅读 · 0 评论 -
bzoj1036 [ZJOI2008]树的统计(树链剖分/lct)
树链剖分就是划分轻重链,把每个点映射到线段树上,保证一条重链上的点在线段树中是一段完整的区间。可以由2遍dfs完成。主要还是个线段树。复杂度O(nlogn+mlog2n)" role="presentation" style="position: relative;">O(nlogn+mlog2n)O(nlogn+mlog2n)O(nlogn+mlog^2n)树链剖分#include原创 2017-09-08 09:20:40 · 270 阅读 · 0 评论 -
bzoj2631 tree(lct)
先下放乘法标记,再下放加法标记。 注意这题很坑的模数,51061*51061会爆int!!!原创 2018-02-01 15:05:12 · 259 阅读 · 0 评论 -
bzoj3282&&luogu3690【模板】Link Cut Tree (动态树)
觉得这篇blog讲得不错:传送门 模板题。lct,动态树,树的形态可以变化的树链剖分,用splay来维护每条重链上的信息。#include #include #include using namespace std;#define ll long long#define inf 0x3f3f3f3f#define N 300010inline int read(){原创 2018-01-31 16:12:00 · 358 阅读 · 0 评论 -
bzoj2002 [Hnoi2010]Bounce 弹飞绵羊(lct/分块)
我们把x向跳到的位置建边(跳出去了就是n+1),可以发现一定是一棵树。那么x跳的次数就是x到n+1之间的边数。每次修改就先把原来的断开,连上新的,用lct维护即可。哈哈哈改对了开心~ update:也可以暴力分块搞。lct#include #include #include #include using namespace std;#define ll long long#d原创 2018-02-07 17:02:29 · 330 阅读 · 0 评论 -
bzoj2816 [ZJOI2012]网络(lct)
每种颜色显然是森林,可以拿lct来维护。每个点拆成C个点。原创 2018-03-07 10:09:46 · 238 阅读 · 0 评论 -
bzoj2594 [Wc2006]水管局长数据加强版(lct+kruskal+离线)
考虑离线操作,倒着做,就是维护不断往里加边的最小生成树。具体做法与魔法森林差不多。 至于如何找到一条边的标号,可以二分查找来做。原创 2018-03-07 11:31:47 · 259 阅读 · 0 评论 -
bzoj4025 二分图(lct)
如何维护这个图是不是二分图呢,我们就来维护一下图中奇环的数量。我们把每条边按扫描线那样分成两个事件来处理。把所有事件按时间排序。我们维护一棵树,每条边的权值是这条边的删除时间,我们维护一棵类似最大生成树的树。这样加进一条边以后只需要与当前树上的边进行判断即可。遇到加边事件: 1)如果加的是一条树边,就直接加树边。 2)如果是一条非树边,替换掉环中最小的一条边,然后: 1.构成奇环,奇环原创 2018-02-14 20:36:38 · 655 阅读 · 0 评论 -
bzoj4530 [Bjoi2014]大融合(lct维护虚边信息)
把(x,y)这条边当根,答案显然就是sz[x]*sz[y]。我们需要动态维护子树大小这个信息。lct显然可以胜任。不同的是,我们还需要维护虚边的信息。怎么办呢?我们发现,虚边信息只会在link和access时有改变。于是我们记sz[x]为x的子树总信息,isz[x]为x的虚边链接的子树信息。link时注意要把x和y都边成根(这样只需要维护y的虚边信息即可)。access时把虚边信息改对。原创 2018-02-16 22:01:55 · 505 阅读 · 0 评论 -
bzoj4998 星球联盟(lct+并查集)
做完bzoj2959,再做这道题就显得比较简单了。我们要维护一个边双联通分量大小。用并查集来缩点即可。原创 2018-02-17 17:56:16 · 433 阅读 · 0 评论 -
bzoj2959 长跑(lct+并查集)
一个边双联通分量中的点我们是可以都取走的。于是我们把边双联通分量缩成一个点,那么我们就得到了一个森林,每次询问就相当于是求树上路径权值和。至于如何缩双联通,我们用并查集来缩。find2(fa2[x])表示x缩完环以后真正的点。再用一个并查集fa1来维护一下原图的连通性。每次加边无非三种情况: 1、x,y在原图中不连通,则我们把这两棵树link起来。 2、x,y在新图中已经是一个点了,忽略。 3原创 2018-02-17 17:27:49 · 598 阅读 · 0 评论 -
uoj207 共价大爷游长沙(lct+Hash)
考虑我们给S中的每条路径一个权值,然后对这段路径异或上这个值。 那么最后询问的那条边如果权值等于S集合的异或和那么就说它被所有路径经过了。这样的正确性是很高的。 然后考虑新加入一条边,就会出现一个环,然后肯定是在这个环上删去一条边,假设是x,y那么在新的树上x->y的路径上异或上x,y这条边的异或值就可以得到新树的正确异或了。(画画图理解一下就是对存在性取反了) 因此维护一棵边权lct...原创 2018-07-15 20:02:35 · 470 阅读 · 0 评论