「图论」树上问题
树的直径
定义
树上最长链(最远点对)
求解
解法一:贪心法
任取一点作为起点,找到树上距离该点最远的点,记作\(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(树高)\)