zoukankan      html  css  js  c++  java
  • 「图论」树上问题

    树的直径

    定义

    树上最长链(最远点对)

    求解

    解法一:贪心法

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

  • 相关阅读:
    BZOJ2301——莫比乌斯&&整除分块
    2019HDU多校第五场A fraction —— 辗转相除法|类欧几里得
    AKS素性检测
    2019牛客多校B generator 1——十进制快速幂
    BZOJ 3884——欧拉降幂和广义欧拉降幂
    libevent HTTP client 的实现
    google proto buffer安装和简单示例
    setenv LD_LIBRARY_PATH
    Centos6.4下安装protobuf及简单使用
    lrzsz
  • 原文地址:https://www.cnblogs.com/knife-rose/p/15211327.html
Copyright © 2011-2022 走看看