zoukankan      html  css  js  c++  java
  • 图论中一类问题的总结 :必须边(点) 可行边(点)

    很多图论问题之所以复杂 是因为这个模型本身是不唯一的,举个例子,一个二分图的最大匹配可能有很多个,而一个无向图的MST(最小生成树)也可能有不同的形态,这就导致了这样一类问题的诞生:1.某条边(或点)是否是满足这个模型的前提下必须存在的 2.可不可能使得这条边存在的前提下满足这个模型

    当然这个问题还可以延伸出许多变种,例如所有边都是必须边,那么这个模型唯一

    1.无向图固定起点S和终点T,某条边是否能够成为S-T最短路上的一条边?

    这个问题比较容易,对S和T 分别做一次SSSP(单源最短路),到各个点的最短路分别记为distS[]和distT[],那某条边x-y,边权为w 能成为最短路的条件显然是distS[x]+w+distT[y]==distS[T]

    2.某条边能否成为无向图MST上的可行边?

    结论:某条边e能成为MST上的一条边的充要条件是在图中不存在一个环使得e为环上权值最大的边

    证明:

    引1:MST的回路性质:不妨设图中所有边权各不相同,C为图G上任意回路,边e为C上权值最大的边,则图G上的MST 不包含e

    该命题很显然,利用反证法即可证明

    充分性:由回路性质直接可以得到不存在一个环使得e为环上权值最大的边

    必要性:

    假设存在不包含e的MST为T,我们在T中加入一条边e则会形成一个回路,由于不存在一个回路使得e为最大值,所以我们删去回路上的最大值的边,此时仍然是树的结构设为T'  且T'包含边e,w(T)<w(T’) 和T是MST矛盾 QED.

    相关问题:BZOJ2561

    3.某个点是否是二分图最大匹配的必须点?

    算法:这个算法比较多,介绍一种比较好理解的

    先跑一边二分图的最大匹配,然后在原有匹配的基础上,我们依次把X部对应Y部匹配的点标记,然后对X部的这个点再次增广,如果能够增广,显然标记的这个点不是必须点

    时间复杂度O(2VE)也就是跑两次匈牙利的时间

     附:同理,判断某条边是否是必须边也可用此法

    4.二分图最大匹配的所有可行边

    算法:跑一遍二分图的最大匹配构造初始匹配,然后把初始匹配的匹配边看成点,向原来X部指向Y部的边建边,然后跑一次强连通即可(貌似不太容易说明白,另一种建图方式是把初始最大匹配的边反向建边,其它边不变 然后跑强连通)

    某条边是二分图匹配的可行边当且仅当这条边的两个顶点所在的强连通分量相同

    to be continue

  • 相关阅读:
    hive 之start hiveServer2 ,thriftServer失败
    sqoop 导入mysql中表存在联合主键
    hive metastore Server 出现异常
    hiveF 函数解析时间问题
    hive 动态分区数设置
    sqoop 操作从hdfs 导入到mysql中语句
    hive 锁表问题
    在hive中直接对timestamp类型取max报错
    Qt程序crash信息的捕捉与跟踪(转)
    功能快捷键如注释、声明和实现之间切换(转)
  • 原文地址:https://www.cnblogs.com/philippica/p/4152955.html
Copyright © 2011-2022 走看看