树的直径
定义
树上最长链(最远点对)
求解
解法一:贪心法
任取一点作为起点,找到树上距离该点最远的点,记作(st),以(st)为起点找到树上距离(st)最远的点,记作(ed),(st)到(ed)即为直径
优点:起点和终点方便获得
缺点:不能处理负边权
解法二:树(dp)
任取一点作为根,记录每点向下的最远距离和非严格次远距离,直径是任意一点两者和的最大值
优点:能处理负变权
缺点:路径难找
性质
1.直径两端点一定是叶子节点
2.距离任意点最远点一定是直径的端点之一,距所有点最大值最小的点一定是直径的中点
3.两棵树相连,新直径的两端点一定是原四个端点中的两个
4.两棵树相连,新直径长度最小为(max(max(直径1,直径2),半径1+半径2+新边长度))(设(k)为直径中最节点中点的节点,半径(=max(len-d[k]),d[k]))
5.一棵树上接一个叶子节点,直径最多改变一个端点
6.若一棵树存在多个直径,多条直径交于一点,且交点是直径严格的严格中点(中点可能在某条边内)
树的重心
定义
树上所有子树中最大的子树节点数最少的节点
性质
1.删除树的重心后所得的所有子树,节点数不超过原树的(frac{1}{2}),一棵树最多有两个重心
2.树中所有节点到重心的距离之和最小,如果有两个重心,那么到他们距离之和相等
3.两棵树通过一条边合并,新的重心在两颗树重心的路径上
4.树删除或添加一个叶子节点,重心最多只移动一条边
求解
定义求解:找到最大子树最小的节点
性质求解:预处理出所有节点到某一结点的距离,换根(dp)取最小值
小(trick):换根时只要走子节点最多的子树,查询复杂度会从(O(n))降低到(O(树高))