• 边双?


    有一个问题:给出一张连通的无向图,加上最少的边使得它成为边双连通图

    网上有一个结论,就是只要求出边双的缩点树,然后找出其中只与一条边相连的点个数k,答案就是(k/2)(上取整)

    网上有一些解释

    摘自https://www.byvoid.com/zhs/blog/biconnect

    统计出树中度为1的节点的个数,即为叶节点的个数,记为leaf。则至少在树上添加(leaf+1)/2条边,就能使树达到边二连通,所以至少添加的边数就是(leaf+1)/2。具体方法为,首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一定是双连通的。然后再找两个最近公共祖先最远的两个叶节点,这样一对一对找完,恰好是(leaf+1)/2次,把所有点收缩到了一起。

    摘自评论

    想请问对于树1--2; 1--3; 1--4; 2--5; 2--6; 3--7; 3--8; 4--9; 4--10. 来说, 依照上述构造双连通图的方法, 第一步可以选择把叶子(5,10) 连起来, 而LCA(5,10) 是1 (Root), 为最远的. 接着同理, 连接叶子(6,9). 则最后只剩下叶子(7,8) 可选, 此时便出现无解的情况了, 若遇到这种情况是不是会发生问题呢? 似乎采用编号法可以解决这个问题.

    好像有一点小问题?怎么证明/构造?

    试着再给一个证明(有错的,只是先记一下

    首先,k个点中每一个点都必须加一条边,否则不可能使得图边双连通,因此答案的一个下界为将它们两两连接的代价:(k/2)(上取整)

    然后给一种构造方法,是以上方法的改版:

    每一次找到树中某两个点,然后在这两个点之间连一条边,那么这两个点路径上所有点都可以被缩成一个点

    将这些点缩起来,之后仍然为一棵树,且其余只与一条边相连的点不受影响(毕竟绝对不可能被缩进去的),也不会产生新的只与一条边相连的点(除了最后的几次缩点操作之外)(这个真的能够保证吗?给出一种尝试:产生新的只与一条边相连的点,当且仅当两点间的路径上(除两点外)只有最多一个点与路径外的点有最多一条边相连;设法证明每一次都可以避开这样的选择方案(怎么证?))

    显然任意一次操作中都能找到这样的两个点,直到只剩1或0个只与一条边的点;只剩1个点时随便找一个点连起来即可

    这样每次一定能少掉2个(最后一次可能为1个)只与一条边相连的节点,总代价为(k/2)(上取整)

  • 相关阅读:
    26个新鲜有魅力的自适应网站设计实例
    计划——Redis
    Go语言工具go get的一点问题
    JNDI数据源的配置及使用 (2010-11-21 21:16:43)转载▼
    策略模式
    在Sping的配置文件中,关于dataSource的配置,就我们常用的方法大致可以有三种:
    Spring 中 用 ${xxx} 读取properties文件的说明
    Spring中属性文件properties的读取与使用
    通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
    设置xml以让通知spring 扫描 注解
  • 原文地址:https://www.cnblogs.com/hehe54321/p/9748115.html
Copyright © 2020-2023  润新知