「图论」树上问题

树的直径

定义

树上最长链(最远点对)

求解

解法一:贪心法

任取一点作为起点,找到树上距离该点最远的点,记作(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(树高))

原文地址:https://www.cnblogs.com/knife-rose/p/15211327.html