树
文章平均质量分 72
fearlessxjdx
这个作者很懒,什么都没留下…
展开
-
树的直径
树的直径树上最长的简单路径即为树的直径。求树的直径的方法就是在树上任选一点u,求距离点u最远的点y,再求距离点y最远的点s,点y到点s的距离即为树的直径。(即两遍DFS或BFS求最远点)证明: 1) 如果u 是直径上的点,则v显然是直径的终点(因为如果v不是的话,则必定存在另一个点w使得u到w的距离更长,则于BFS找到了v矛盾) 2) 如...转载 2018-09-17 15:21:34 · 142 阅读 · 0 评论 -
倍增法求LCA
#include <bits/stdc++.h>#define rep(i,a,b) for(int i = a; i <= b; ++i)#define per(i,a,b) for(int i = a; i >= b; --i)#define WTS(x) cerr <&l原创 2018-10-02 15:53:10 · 141 阅读 · 0 评论 -
树链剖分详解
转载请注明出处,部分内容引自banananana大神的博客树链剖分就是将树分割成多条链,然后利用数据结构(线段树、树状数组等)来维护这些链。前置知识: dfs序 LCA 线段树先来回顾两个问题:1,将树从x到y结点最短路径上所有节点的值都加上z这也是个模板题了吧我们很容易想到,树上差分可以以O(n+m)的优秀复杂度解决这个问题2,求树从x到y结点最短路径上所有节点的值之和lca...转载 2018-10-02 17:13:00 · 361 阅读 · 0 评论