• 总结:最大权闭合子图


    这两天学习了最大权闭合子图的模型以及将其转化为最大流求解的方法(见这里),这里就不再重复说明了,在这里我就再添加一些我自己对该模型的理解。

    这个模型可以解决的是有约束条件的点集的最佳选择问题,而这些约束条件通常都是“要选择点A,必须同时选择点B”这样的形式,称作A依赖B,在这样的情况下使得选择的点集中点权最大,这样的问题就可以用最大权闭合子图的模型来解决,只需要对于所有X依赖Y的情况,连接有向边(X,Y)即可。

    然而这个模型中点和点之间的依赖情况分为两种,一种是“无序依赖”,一种是“有序依赖”,分别是什么意思呢?无序依赖就是指“要选择点A,必须同时选择点B”这样的形式,这样的话点集的选择一般也是无序的,即可以同时选择A,B。而有序依赖是指“要选择点A,必须选择点B”,这样的话点集的选择也是有序的,即必须先选择点B,再选择点A。那么对于无序依赖的模型,直接套用最大权闭合子图的模型求解即可,麻烦的是有序依赖的模型。由于有序依赖的特殊性,导致如果有序依赖的关系形成一个“依赖环”,那么依赖环上的点显然是取不了了。同时,如果有点有序依赖该依赖环上的点,这样的点也不能取。这样扩展下去,最后就成为:如果一个点有一条有向路径通向一个依赖环,那么这个点就不能取。因此在求解最大权闭合子图之前必须要把这些点去除。怎么去除呢?我们知道求环可以使用拓补排序,所以这里用拓补排序就可以很快的去除掉不能取的点:对于原图的反图进行拓补排序,最后没有入过队的点就是不能取的,可以证明这些点要么在环上,要么在去环的路上。于是我们就解决了有序依赖的模型。

    目前最大权闭合子图的题目我做的不多,但是估计大体上就是以上我所说的两种模型了,这里就贴一些题以及我写的题解:

    无序依赖模型:

    NOI2006-最大获利 题解

    有序依赖模型:

    NOI2009-植物大战僵尸 题解

  • 相关阅读:
    SecureRandom
    《Head First 设计模式》[02] 观察者模式
    《MySQL必知必会》[07] 管理事务处理
    《MySQL必知必会》[06] 触发器
    《MySQL必知必会》[05] 存储过程和游标
    Centos7安装Nginx
    IDEA配置Tomcat
    Java小功能大杂烩
    Java处理中文乱码问题
    Java邮件发送
  • 原文地址:https://www.cnblogs.com/Maxwei-wzj/p/9793821.html
Copyright © 2020-2023  润新知