(由于本人太菜所以最近一直在补一些基础算法……) 求树的重心的基本思想就是从每个节点出发分别遍历一遍树,统计max_part,其中能够使得max_part最小的就是树的重心 另外:一棵有根树至多有两个重心,这个结论好像有些题可以用(比如BZOJ4337,不过那个数据太水只有50(什么暴力乱搞 ...
关于树的重心的一些性质都没有理解的很好 在此总结一下。 树的重心的应用 点分治 点分树 动态维护树的重心等等。 关于点分治的复杂度一论 这个其实是套用了 分治的思想 或者是CDQ 的思想 对区间不断的进行递归分治,这个分治可以很快的分出断点mid 而在树上我们就无法快速得出这个mid了。 分治区间的复杂度证明 每次都将区间二分 这样不断的分支下去 就是logn层 每层我们对每个点进行O 的操作的 ...
2019-08-13 14:11 1 440 推荐指数:
(由于本人太菜所以最近一直在补一些基础算法……) 求树的重心的基本思想就是从每个节点出发分别遍历一遍树,统计max_part,其中能够使得max_part最小的就是树的重心 另外:一棵有根树至多有两个重心,这个结论好像有些题可以用(比如BZOJ4337,不过那个数据太水只有50(什么暴力乱搞 ...
先任选一个节点作为根,将无根树转换成有根树,代码实现是DFS。 以图9-13的节点i为例,因为是任意选择一个节点做DFS,有以下几种可能: 1.以节点i为根节点,有三个子树 2.以左下方节点为父节点,访问节点i,有两个子树 3.以右下方节点为父节点,访问节点i,有两个子树 4. ...
想了我好长时间。。。 树的重心如果不唯一,则至多有两个,且这两个重心相邻 先假设有两个重心 \(u,v\) 不相邻,考虑它们之间的这条路径,则至少有三个节点(以下的 “它们之间的路径” 都是指 \(u,v\) 之间的路径) 设 \(u\) 的不包含它们之间的这条路径 ...
第1.5版 关于树的重心 有配图 有文字讲解 关于Godfather 有AC代码 文字说明 关于centroid 本人蒟蒻这晚上只写了55pts(以后会有AC代码的) 新增20pts二叉树 手把手教你分析时间复杂度 考场写暴力得省一心 ...
1.树的直径 树上最长的简单路径即为树的直径。 求树的直径的方法就是在树上任选一点u,求距离点u最远的点y,再求距离点y最远的点s,点y到点s的距离即为树的直径。 View Code 2.树的重心 若有一点,其所有子树中最大子树的节点数最少,则该点 ...
浅谈树的直径 定义: 树上一节点最大子树的节点数最小; 性质: 1.删除重心后所得的所有子树,节点数不超过原树的1/2,一棵树最多有两个重心; 2.树中所有节点到重心的距离之和最小,如果有两个重心,那么他们距离之和相等; 3.两个树通过一条边合并,新的重心在原树两个 ...
树的直径 树的直径,是指树上最长的一条链。 求树的直径有两种方法 \(1.DP\):\(d1[u]\)表示\(u\)到达子树中叶子节点的最长链,\(d2[u]\)表示\(u\)到达子树中叶子节点的次长链,两条链不能有交集,只需要对每个节点做以下更新同时维护最大值最小值即可 这样维护保证 ...
代码定义:树的重心也叫树的质心。对于一棵树n个节点的无根树,找到一个点,使得把树变成以该点为根的有根树时,最大子树的结点数最小。换句话说,删除这个 [1] 点后最大连通块(一定是树)的结点数最小。 性质: 树中所有点到某个点的距离和中,到重心的距离和是最小 ...