zoukankan      html  css  js  c++  java
  • 最大权闭合子图

    现在有一个有向图,每个点有点权,点权可正可负。对于任意一条有向边i和j,选择了点i就必须选择点j,你需要选择一些点使得得到权值最大。 
    这个问题可以用网络流解决。 
    建图方法:对于任意点i,如果i权值为正,s向i连容量为其权值的边,否则i向t连容量为其权值的绝对值的边。原图所有边容量为正无穷。则最大权=正权和-最大流。 
    如何证明呢?我们把最大流理解成最小割,那么割掉的边一定不可能是正无穷的边。 
    我们发现,选择一个正权点即不割掉s到其的边,选择一个负权点即割掉其到t的边。 
    现在证明方案合法。 
    对于依赖关系i到j: 
    假设i点权为正j点权为负。选了i不选j即没有割掉s到i的边而且没有割掉j到t的边,显然s和t联通,不符合最小割定义。 
    假设i点权为负j点权为正。选了i不选j即割掉i到t的边而且割掉s到j的边,由于s到t现在不连通,我们不割这两条边同样s和t是不联通的,那么割这两边不满足割量最小,不符合最小割定义。 
    其余情况同理,不符合割量最小。 
    注意这个算法不需要原图是DAG。

  • 相关阅读:
    周末小练习
    第十二届全国大学生信息安全竞赛总结与反思
    sql注入学习心得与sqlmap使用心得
    2019“嘉韦思”杯RSA256题目wp
    斐波那契数列求解的三种方法
    二叉树的下一个节点
    替换空格
    二维数组中的查找
    不修改数组找出重复数字
    数组中重复数字
  • 原文地址:https://www.cnblogs.com/baocong/p/6662226.html
Copyright © 2011-2022 走看看