• 最大权闭合子图


    首先有 推荐阅读


    定义

    一个有向图, 每个点有点权 wi(可负), 要找到其一个子图, 满足:

    1. 对于原图中所有边 (u,v), 若点 u 在子图中, 则点 v 在子图中

    2. 子图的点权和最大

    sol

    新建一个网络图:

    对于原图中的点, 若 wi > 0, 连边 (S, i, wi), 若 wi < 0, 连边 (i,T,-wi), 若 wi=0, 不做任何事。

    对于原图中的边 (u,v), 连边 (u,v,+∞)。

    答案就是 原图所有正点权之和 - 网络图最小割

    证明:

    参见 最小割模型在信息学竞赛中的应用

    或:

    回忆最小割的理解:…………把所有点 分成两个集合 S,T, 最小化……(balabala)…………

    回到那个网络图, 考虑把 “选” 看成和 S 在一个集合里, 把 “不选” 看成和 T 在一个集合里, 最小割的值是 “将物品分为选和不选损失的最小代价”。

    那么对于 S 到正权物品的边,可以看成 “不选这个物品就要损失这个正权物品的权值”;

    对于负权物品到 T 的边, 可以看成 “选这个物品就要损失这个负权物品的相反数”。

    对于一个点对 (u,v), 若在原图的联通关系中, 选了 u 就必须选 v, 在这个网络图中很好体现, 具体地, 选了 u, 即 (S,u) 未断开, 即 (v,T) 必须断开, 即 (S,v) 不需要断开。(由于一句话里混了很多情况, 这里叙述的比较粗)

  • 相关阅读:
    必懂的wenpack优化
    必懂的webpack高级配置
    webpack基础知识
    vue-cli
    codemirror使用
    js实现二叉树
    react-生命周期
    window 批量修改或去除文件后缀名
    十分钟搞清字符集和字符编码
    php判断一个值是否在一个数组中,区分大小写-也可以判断是否在键中
  • 原文地址:https://www.cnblogs.com/tztqwq/p/14239552.html
Copyright © 2020-2023  润新知