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。

  • 相关阅读:
    Ajax调用处理页面错误信息500的解决思路
    PHP数据库的增删改
    PHP登录及处理
    PHP数据访问
    PHP数组(正则表达式、数组、预定义数组)
    php函数
    45
    数据库_CRUD操作之读取数据之高级读取
    数据库_CRUD操作之读取数据
    数据库_CRUD操作之修改数据
  • 原文地址:https://www.cnblogs.com/baocong/p/6662226.html
Copyright © 2011-2022 走看看