zoukankan      html  css  js  c++  java
  • 带有度限制的最小生成树

    概念:在一个无向图中,在某个特殊点限制了必须为k度的情况下,而求出的最小生成树。


    一些阐述

    [关于字母]

    设边集为E,特殊点为V0,最小限制生成树为D

    Hi表示V0的度数为i时的最小生成树。

    [关于操作]

    删添操作:在树上加入某条顶点为V0的点,在构成的环中删掉另一条不与V0关联的边。

    最大删添:删添时去掉环中最大的一条不与V0关联的边。

    差额最大删添:加入的边与最大删添的差值最大的一次删添。


    原理:见黑书p300-p303

    证明有些复杂,于是跳过证明得到定理一:

    TV1...Vn的某棵最小生成树,若边(i,j)不属于T,则(i,j)不属于D


    这样可以大大缩小选择边的范围。


    定理二:

    H1T的基础上加一条最短的(V0,Vi)

    H1可以通过k-1次差额最小删添操作得到Hk


    这样可以方便我们从H1逐渐递推到Hk


    具体步骤

    1.找到V1...Vn的所有连通块,求出每个连通块的最小生成树Ti

    2.在每个块中选出一条最小的与V0相连的边 [ 若块的数目t>k则无解 ],从而得到Ht

    3.for i=t+1 to k

    通过Hi-1 上进行“差额最小删添操作”,添加并删除一条边得到Hi

    其中差额最小删添操作的优化可以用:令Maxi表示ViV0的路径上的最大边,那么连上(V0,Vi)的代价就是f(Vi)=w(V0,Vi)-Maxi,所有f(Vi)中的最小值就是差额最小删添操作。

    Maxi的预处理需要O(n)V0开始dfs,每次选了一条(V0,Vi)后则需要从Vi再跑一次,也是O(n)的。

    4.输出答案

     

    题目练习:Poj 1639 Picnic Planning野餐计划

     

    还没打过代码...未完待续

  • 相关阅读:
    南邮NOJ整除的尾数
    【HDOJ】2844 Coins
    【HDOJ】2546 饭卡
    【HDOJ】1031 Design T-Shirt
    【HDOJ】1983 Kaitou Kid
    【HDOJ】2612 Find a way
    【原创】如何构建MIPS交叉编译工具链
    【HDOJ】1239 Calling Extraterrestrial Intelligence Again
    【Python Network】使用DOM生成XML
    【HDOJ】2602 Bone Collector
  • 原文地址:https://www.cnblogs.com/Robert-Yuan/p/5034467.html
Copyright © 2011-2022 走看看