• 关于树的直径


    题解:

    1.树的直径有一种找法是找两次最远点

    于是这可以证明一个性质

    树上一个点到最远点的距离等于到一条直径两个端点的较大值

    2.合并两颗树的时候,新树的直径为两颗树的4个直径两两组合的最大值(有多条取一条就可以)

    3.另一个性质

    树的所有直径一定有一个公共交点

    对于两条,我们很好证,只需要找到他们之间的路径即可反证

    对于两条以上,我们会发现如果如果有多个交点,就构成环了

    例题:

    1.现在要摧毁一些点,使得这棵树分成两棵小树,第一棵小树的直 径为D1,且有不超过C1个点可能在直径的端点,第二棵小树直径为 D 2,且有不超过C 2个点可能在直径的端点.

    n<=200

    题解:

    首先比较显然的是我们要去枚举以哪个点切割成两颗树(如果还有很多儿子就把多的儿子都删了)

    然后就等于变成了一个问题,求一颗子树内满足直径为d,不超过c个点为直径端点

    这个问题看上去并不好解决

    这里有个方法是:去枚举树的中心(树的直径的中心)

    我们考虑,直径对于我们来说,肯定是越短越好,点肯定是删的越少越好

    所以对于枚举的中心点,我们会把到它c/2以内的点保留

    对于大于等于c/2的,我们保留k个就可以了

    然后奇数还要讨论一下

    反正这样被变成码农题了。。

    2.给定一棵 n 个节点的树,你可以进行 n − 1 次操作,每次操作步骤如下: 选择 u, v 两个度数为 1 的节点。 将 u, v 之间的距离加到 ans 上。 将 u 从树上删除。 求一个操作序列使得 ans 最大。

    这个比较容易联想到直径

    进一步我们可以想到一个点到最远点的距离是到直径两端点之一

    于是我们会发现,我们只要先删外面的点,再把直径之间的点逐一删除就行了

    那如果有多条直径呢,我们会发现进行这两个过程是分别等价的

  • 相关阅读:
    Spring定时任务注解实现定时清空指定文件夹下的文件
    设计模式之单例模式
    在cmd下使用imp命令导入oracle的dmp文件报错ORA-02304
    多态是什么干嘛的
    qt编辑器的问题
    qt中文格式GBK.UTF-8,unicode 之间的转换
    mysql 安装及设置
    mysql触发器
    转载 java开发基础 https://blog.csdn.net/jiangjiewudi/article/details/9565749
    测试 转载
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/10125920.html
Copyright © 2020-2023  润新知