zoukankan      html  css  js  c++  java
  • 关于双联通分量的存在条件的证明(对于算法进阶的补充)

    其实还是晚上的思考

    为什么晚上这么多思考啊(╯‵□′)╯︵┻━┻

    还有我还花了一个上午,就证了这么一个SB东西(╯‵□′)╯︵┻━┻

    点双存在条件

    点双联通分量的定义:一个无向连通图中不存在割点即可。

    一个无向联通图是点双,当且仅当满足以下条件之一:

    1. 图的顶点数不超过2
    2. 图中任意两点都存在于至少一个简单环中(但是不是说所有点在一个简单环),其中简单环指的是不自交的环,也就是我们通常画出来的环。

    1条件很明显,不说了,2条件的话,充分性很好证明,(x,y)都同时包含在至少一个简单环中,则图中一定没有割点,是点双。

    但是必要性吗。。。。


    引理1:对于两个相邻的点双(共用一个割点),这两个边已经满足图中任意两点都包含在一个简单环中,从这两个点双各选一个点(除了割点),连一条边,可以证明,这个新形成点双也满足这个图中任意两点都包含在一个简单环中。
    证明:
    在这里插入图片描述
    这样两个绿点加割点形成简单环,现在我们只需要证明,存在一条简单路径能从绿点走到蓝点再走到黑点就可以了。

    随便选择一个蓝点到黑点的简单环,设蓝点为(a),黑点为(b),这样就存在一条路径:(a->x_1->x_2->x_3->...->b、a->y_1->y_2->y_3->...->b),首先如果蓝点就在路径上,直接存在,如果不在路径上。
    首先考虑绿点到蓝点的一条路径,其不可能与两条路径有交点。如果其只和一个路径有交点,那么直接选择即可。
    在这里插入图片描述
    如果与两条路径都有交点,那么按图中选法即可(找到最早有交点的路径直接走路径即可)。
    在这里插入图片描述
    这样就证明啦QMQ

    引理2(用来补充说明上面那个引理):两个点双最多共用一个割点。
    证明:如果共用两个,这两个点必然不是割点,证毕。

    然后就可以证明了,对于一个点双,建立一个生成树,不断加边,最后一定会成为一个点双的(如果不能成为点双,那么说明原本就不存在点双。)


    边双存在条件

    边双联通分量的定义:一个无向连通图中不存在桥即可。

    一个无向联通图是点双,当且仅当满足这个条件:
    图中任意一条边都存在于至少一个简单环中(但是不是说所有点在一个简单环),其中简单环指的是不自交的环,也就是我们通常画出来的环。

    哇,这个简直SB,充分性和上面差不多,必要性的话。

    你把这个边删掉,然后不影响边左右两点的连通性,说明存在一条其他路径,加上这条边即可构成简单环啊,简直SB。

  • 相关阅读:
    Go语言十六进制转十进制
    Go语言中底层数组和切片的关系以及数组扩容规则
    Golang超时机制--2秒内某个函数没被调用就认为超时
    约瑟夫环问题(猴子选大王)
    冒泡排序优化
    斐波那契数列
    Linux下使用acme.sh (Let's Encrypt) 配置https 免费证书
    git 本地分支指定对应的远程分支
    Git分支开发 -- 利用git pull命令将远程指定仓库的分支拉取到本地
    phpStorm 之 本地开发,Linux上跑项目(连接远端服务器开发)
  • 原文地址:https://www.cnblogs.com/zhangjianjunab/p/13696765.html
Copyright © 2011-2022 走看看