首页 > 其他分享 >边分治和边分树

边分治和边分树

时间:2024-01-25 21:34:29浏览次数:18  
标签:分树 连通 dep text 分治 二叉树

边分治就是,每次选择一条作为分治中心。然后把这条边断掉,在两个连通块内继续递归。

考虑将原树三度化,就是对于 \(u\) 的每条出边,新建一个点 \(w\),连边 \((u, w, 0), (w, v, d)\),然后令 \(u = w\)。三度化后边分治的复杂度就是对的,为 \(O(n \log n)\)。

边分治的好处是,每次只用考虑两个连通块的贡献。

进行边分治时,每个点有一棵二叉树和指向这个二叉树的某个结点,称这个为 \(a_u\)。初始时每棵二叉树都只有一个结点,\(a_u\) 就是唯一的那个结点。

然后每次分治,称在一个连通块内的点为黑点,另一个连通块内的点为白点,若当前点为黑点那么给 \(a_u\) 新建一个左儿子并且移动 \(a_u\) 到新建的这个点,否则新建右儿子。

这样边分治结束后每个点都维护了一棵独一无二的二叉链。有什么用呢?

如果两个点的二叉链在某个点上面都相同,那么表示这两个点在这些分治过程中都被分到了同一边。在某个点分叉说明从某个分治过程开始两个点不在同一个连通块了,两点间路径信息应该在这个点被统计。

每个点的边分树是可以合并的,复杂度和线段树合并相同。所以我们可以在合并时统计一些信息。

1. P4565 [CTSC2018] 暴力写挂

考虑把其中一个 \(\text{dep}(\text{lca}(x, y))\) 去掉。答案的式子可以化成:

\[\frac{\text{dis}(x, y) + \text{dep}(x) + \text{dep}(y) - 2 \text{dep}'(\text{lca}'(x, y))}{2} \]

考虑建出边分树,然后在第二棵树上 dfs,在 \(\text{lca}\) 处边分树合并统计不同子树的信息。

边分树上每个点维护一个 \(g_u\) 表示子树内 \(\text{dis}(x, u) + \text{dep}(x)\) 的最大值。合并时,有 \(ans \gets \max(g_{ls_u} + g_{rs_v} - 2d, g_{ls_v} + g_{rs_u} - 2d)\)。然后更新 \(g_u \gets \max(g_u, g_v)\)。

时空复杂度均为 \(O(n \log n)\)。

标签:分树,连通,dep,text,分治,二叉树
From: https://www.cnblogs.com/zltzlt-blog/p/17988230

相关文章

  • Ybt 金牌导航 6.1.H. 时空旅行 / P5416 [CTSC2016] 时空旅行(线段树分治+凸包)
    题意简述初始有版本\(0\),其中仅包含点\(0\),且\(c_0\)给出,\(x_0=0\)。对于第\(i\)个版本,它依赖第\(fr_i\)个版本,而且会在父级版本的基础上进行以下两种操作之一:插入一个新点,并且会给出\(x_i\)和\(c_i\)。删除一个本就存在的点(不为\(0\))给出\(m\)次询问,每次给出......
  • CF-1921-F-根号分治
    1921-F题目大意有一个长为\(n\)的序列\(a\),有\(q\)次询问,对于每次询问:给定\(s,d,k\),请输出\(\sum_{i=1}^{k}i*a_{s+(i-1)*d}\)Solution根号分治。对于\(d\ge\sqrt{n}\)的情况,直接暴力计算即可。对于\(d\le\sqrt{n}\)的情况,这时需要预处理两个数组:\(pre,sum\),这里\(pr......
  • CEOI2023D1T3(LOJ4019) Brought Down the Grading Server? (分治+欧拉回路)
    因为我们有\(S=2^k\),所以我们先考虑\(k=1\)即\(S=2\)的时候应该怎么做。发现如果我们对于每一个核心从\(t_1\)向\(t_2\)连一条无向边,如果我们把「不交换\(t_1,t_2\)」看成将这条边定向为\(t_1\tot_2\),否则如果「交换\(t_1,t_2\)」看成将这条边定向为\(t_2\tot_1......
  • 根号分治
    原本准备讲题用的,结果讲急了没用上。乱写的,就扔这儿吧。先看一个题。CF797EArrayQueries给定长度为\(n\)的序列\(a\)。\(m\)次询问。每次询问给出\(p,k\)。您要不断地执行操作\(p\getsp+a_p+k\),直到\(p>n\)为止。询问的答案为操作次数。\(1\len,q\le10^5\),\(......
  • 一本通金牌导航 分治法 E.工程划分 / P5290 [十二省联考 2019] 春节十二响(启发式合并)
    题目传送门题意简述:将树上\(n\)个点划分为若干个集合,使得集合中的点两两没有祖孙关系。一个集合的权值是集合内点的权值的最大值,求所有集合的权值之和的最小值。首先这题有个非常显然的贪心:将几个权值大的点尽可能的合并到一个集合中是更优的。集合中的点两两没有祖孙关系,说......
  • GYM102596L Yosupo's Algorithm【分治,支配对】
    给定平面上\(2n\)个点,每个点有坐标\((x_i,y_i)\),权值\(w_i\)及颜色\(c_i\)。所有点满足:若\(c_i=0\),则\(x_i<0\);若\(c_i=1\),则\(x_i>0\)。\(q\)次查询,每次给定\(L_i,R_i\),你需要选择两个点\(i,j\)满足如下条件:\(c_i=0,c_j=1\)。\(x_i<L,x_j>R\)或\(x_......
  • 刺络放血第一天的部分治症
    四络放血的常用部位。第一个。肘窝部也就是在我们的。这是什么曲池?对不对?曲池尺泽曲泽这一个范围。你记着刺刺穴永远用的不是一个穴位点,它用的是一个区域。就跟我们说这个。假如说这胳膊吧,这是不是肘窝区?这是不是一般都有条大街?这是指责。这边曲子我们刺血的时候说的是这窝部,然后......
  • 笔记重修计划一:斜率优化 dp & cdq 分治维护凸包(施工中)
    施工中,但是目前暂停施工。前言刷cdq分治的时候做到了这题,发现自己不是很懂这个东西,跑回去看自己几个月前写的斜率优化dp笔记,当时认为自己弄得很明白了,但现在看来简直就是皮毛,遂弄明白后写下此文,希望自己之后有更多启发时能继续充实这篇文章。若有不妥之处望指出。如果单调......
  • 分治-平面最近点对问题
    oiwiki中该问题的讲解。1.P1257平面上的最接近点对基础款,暴力可过。2.P1429平面最近点对(加强版正常款,玄学版本也能过(题解第一个做法,不过最初没卡这种方法的话应该随机情况下能过绝大多数点)。分治解决,将集合每次分成两部分,两个部分本别先求出集合内部的最小点对的答案d......
  • 三位偏序,CDQ分治入门
    (我发现我最近dp没有进展,导致我开始刷水题了。。)cdp分治,我蓝书又又看不懂了所以我还是自己去找题目做的看了看,这个应该才算是真正的入门吧这里先放上一句我觉得非常重要的话吧CDQ分治有一个重要的思想——用一个子问题来计算对另一个子问题的贡献。看到最后我对这句话的理解......