树链剖分
文章平均质量分 80
ez_lcw
这个作者很懒,什么都没留下…
展开
-
【P5385】【Cnoi2019】须臾幻境(LCT)
题面:有 nnn 个点,有一个长度为 mmm 的边序列 AAA,qqq 次询问由这 nnn 个点和 Al,⋯ ,ArA_l,\cdots,A_rAl,⋯,Ar 的边构成的图中的连通块数量。强制在线。n,q≤105n,q\leq 10^5n,q≤105,m≤2×105m\leq 2\times 10^5m≤2×105。题解:在线也能把它搞成离线:枚举右端点 rrr 右移,并维护 A1,⋯ ,ArA_1,\cdots,A_rA1,⋯,Ar 组成的以下标为边权的最大生成森林,以及一棵可持久化线段树原创 2022-03-16 21:12:19 · 243 阅读 · 0 评论 -
【XSY3633】匹配(树形 DP,树链剖分,分治)
考虑最普通的 DP:设 fu,i,0/1f_{u,i,0/1}fu,i,0/1 表示 uuu 子树内恰好包含 iii 条边的最大权匹配,其中 uuu 有无被匹配。这是个树上背包,暴力 DP 是 O(n2)O(n^2)O(n2) 的。可以发现 fu,i,jf_{u,i,j}fu,i,j 关于 iii 是一个凸函数(从费用流的角度分析),这告诉我们合并两棵子树的 DP 数组的时候(hi=maxj(fj+gi−j)h_i=\max_j (f_j+g_{i-j})hi=maxj(fj+gi−j))原创 2022-02-19 22:51:08 · 512 阅读 · 0 评论 -
【XSY4206】QWQ(trick)
两个问题的解决方法感觉很妙:一、给你若干棵树 T1,T2,⋯ ,TkT_1,T_2,\cdots,T_kT1,T2,⋯,Tk,设 f(Ti,u,v)f(T_i,u,v)f(Ti,u,v) 为树 TTT 中 lca(u,v)lca(u,v)lca(u,v) 的深度,问如何优美地表示 g(u,v)=mini=1kf(Ti,u,v)g(u,v)=\min_{i=1}^k f(T_i,u,v)g(u,v)=mini=1kf(Ti,u,v)。其实很简单,设 PuP_uPu 为一个 kkk 元组序原创 2021-11-15 07:18:42 · 96 阅读 · 0 评论 -
【十二省联考2019】希望(容斥,换根DP,长链剖分,懒标记)
暴力的想法是考虑钦定每个点作为到达点并统计贡献,但显然这样会算重。注意到会算重的到达点一定构成了一个连通块,这是一个很好的性质,方便了我们容斥:我们直接用点的贡献减去边的贡献(一条边的两个端点同时是到达点)即可,因为一个连通块满足点数减边数等于 111。先考虑点的贡献,需要统计以某个点为根且深度不超过 LLL 的连通块个数。可以换根 DP:设 fu,if_{u,i}fu,i 表示 uuu 子树内以 uuu 为根且深度不超过 iii 的连通块个数,转移显然:fu,i=∏v(fv,i−1+1)f_{u原创 2021-10-15 07:29:58 · 165 阅读 · 0 评论 -
树上连通有关背包:【BZOJ4182】shopping &【HDU6566】The Hanged Man
选这两道题是因为这两道题都是树上背包,而且选的点的要求都与连通性有关,而且都是按 dfs 序 DP 来模拟不断加入物品,而且都能用树剖和点分治优化(不过优化的点一个跟子树大小有关一个跟深度有关),比较相似。【BZOJ4182】shopping题意:树上多重背包,要求选了的点是一个连通块。暴力想法设 fu,if_{u,i}fu,i 表示选了以 uuu 为根且在 uuu 子树内的连通块,花费为 iii 的最大收益。如果使用暴力合并子树的方法的话,时间复杂度 O(nm2)O(nm^2)O(nm2),而且原创 2021-08-25 22:25:29 · 262 阅读 · 1 评论 -
【XSY3991】时代的眼泪·SP(分块)
题面时代的眼泪·SP题解区间置 fa 问题。根据题目 “时代的眼泪” 的提示, 考虑对序列 aaa 分块,散点往上跳我们暴力更新,下面我们只考虑整块往上跳:实际上,若块中有一点 xxx,往上跳到 yyy,但如果 yyy 已经被同一块内的访问过了,那么证明有另一点在 xxx 的更高处,此时 xxx 就可以删掉了。所以我们使用一个数据结构来维护块中还有贡献的 xxx。这样每个块只会访问整棵树一次,时间复杂度 O((n+q)n)O((n+q)\sqrt{n})O((n+q)n)。需要会长链剖分 O(原创 2021-04-06 08:29:42 · 181 阅读 · 0 评论 -
【XSY3972】树与图(树形dp,树剖,分治NTT)
题面树与图题解不难发现本题可以转化成以下题目: 给定一个 nnn 个点的有根树 ,你可以在树上选择 kkk 个点,满足对于任意两个点都不 互为祖先关系,且从根到每个叶子的路径上都恰好有一个被选择的点。求对于所有 i∈[1,n]i\in[1,n]i∈[1,n],求所有恰好选择 iii 个点的方案数。这显然可以树形 dp,设 fi,jf_{i,j}fi,j 表示以 iii 为根的子树中恰好选择了 jjj 个节点的方案数(先不考虑选择顺序),合并就是树上背包。发现这个树上背包可以用多项式乘法实现,即设原创 2021-03-18 08:13:17 · 202 阅读 · 0 评论 -
【XSY3961】决战圣诞树(dfn序线段树,多项式,生成函数)
题面决战圣诞树题解设 aia_iai 表示最终满意指数为 iii 的方案数,我们考虑求出 aia_iai 的生成函数。那么树上每个点都要维护一个多项式,表示仅对于这个点的 aia_iai 的生成函数。那么题目就可以看成支持以下几个操作:给定 v,av,av,a,将节点 vvv 的多项式乘上 (1+xa)(1+x^a)(1+xa)。给定 v,b,cv,b,cv,b,c,将节点 vvv 的多项式乘上 (1+xa+xb)(1+x^a+x^b)(1+xa+xb)。给定 vvv,将与原创 2021-03-12 14:51:36 · 262 阅读 · 0 评论 -
【CF1416D】Graph and Queries(虚点)
带删除维护最大值显然不好做,所以考虑先把最后的图建出来,再从后往前加边。但是询问中还带修改(让 pu=0p_u=0pu=0),这样会影响后面的询问,所以也不能加边时就得到答案。这里给出一种简单易懂的做法:在从后往前枚举操作的时候:如果是加边 (u,v)(u,v)(u,v) 且 uuu 和 vvv 不连通(设它们所在连通块的根分别为 aaa、bbb),我们就新建一个虚点连向 aaa、bbb,并且把这个虚点作为 aaa、bbb 的父亲。如果是询问 xxx,也就是询问当前 xxx 所在连通块内原创 2021-01-25 19:47:22 · 106 阅读 · 0 评论 -
【XSY3679】农民(树链剖分)
先考虑一个节点怎么样才会被走到。对于一个权值为为 xxx 的节点,它的左子树内的节点有可能被走到仅当其权值小于 xxx,右子树内的节点有可能被走到仅当其权值大于 xxx。那么树上每条边相当于给这条边以下的子树加了一个大于或是小于的限制,询问一个节点时,只要判断这个节点的权值是否同时满足到根路径上所有边的限制即可。我们可以用树链剖分加线段树维护这个限制,单点修改很好处理,子树翻转相当于取反子树内所有限制的符号,线段树同时维护一下翻转后的限制,打标记维护即可。时间复杂度 O(mlog2n)O(m\log原创 2020-12-31 17:44:02 · 92 阅读 · 0 评论 -
【bzoj4712】洪水(dp,树剖)
一种非 DDP 的树剖做法。主要是因为我不会 DDP,在考场上只想到了树剖。首先如果没有修改,很容易想到朴素的 dp 做法:设 valuval_uvalu 表示 uuu 本身的权值,dpudp_udpu 表示以 uuu 为根的子树的答案,显然有:dpu=min(valu,∑v∈son(u)dpv)dp_u=\min\left(val_u,\sum_{v\in son(u)}dp_v\right)dpu=min⎝⎛valu,v∈son(u)∑dpv⎠⎞就是要么割自己,要么割所有的子原创 2020-10-30 21:12:29 · 166 阅读 · 0 评论 -
【NOI2014】购票(树形dp+树剖+斜率优化)
考虑树形 dp,设 dpidp_idpi 为 iii 节点到 SZ 市的最小费用,disidis_idisi 为 SZ 市到 iii 节点的距离。显然初始化 dp1=0dp_1=0dp1=0,然后 disidis_idisi 可以提前预处理出来。然后有 dpu=min(dpv+(disu−disv)×pu+qu)dp_u=\min(dp_v+(dis_u-dis_v)\times p_u+q_u)dpu=min(dpv+(disu−disv)×pu+qu)。(vvv 为 uuu 的原创 2020-07-19 13:56:33 · 182 阅读 · 0 评论 -
【WC2010】重建计划(分数规划+长链剖分)
长链剖分因为有很多巨佬只是讲了一下大致的做法,并没有详细地解释如何维护,所以就有了这篇题解。巨佬们都不屑于详细写,我太弱了/kk首先先对原树进行长链剖分。先讲一些定义:一条路径的权值和指的是这条路径上的所有边权之和一条路径的长度指的是这条路径包含多少条边depidep_idepi 表示 iii 的深度。maxdepimaxdep_imaxdepi 表示在 iii 子树内的最深的节点的深度。disidis_idisi 表示从根节点到节点 iii 的路径权值和是什么。原创 2020-06-24 22:09:34 · 241 阅读 · 0 评论 -
【bzoj2402】陶陶的难题II(分数规划+树链剖分+斜率优化+半平面交)
题目让我们维护这么一个东西:yi+qjxi+pj\dfrac{y_i+q_j}{x_i+p_j}xi+pjyi+qj 的最大值。容易想到分数规划,二分枚举答案 midmidmid,则有:yi+qjxi+pj=mid\dfrac{y_i+q_j}{x_i+p_j}=midxi+pjyi+qj=mid化简:yi+qj=mid×(xi+pj)y_i+q_j=mid\times(x_i+p_j)yi+qj=mid×(xi+pj)移项得:(yi−mid×xi)+(qj−mid×pj.原创 2020-06-24 22:02:53 · 226 阅读 · 0 评论