• [学习笔记]最小割之最大权闭合子图


    这篇博客不错,言简意赅一针见血

    网络流——最小割求最大权闭合子图

    对于这样的一类问题:

    有一些点,每个点有点权,点权可正可负。

    对于图中的任意一条有向边i和j,代表如果选择了点i就必须选择点j

    你需要选择一些点使得得到权值最大。 
    (建模是注意的是,每个点只能被选择一次,即使多个链下来,但是贡献不会重复累加)

    叫做最大权闭合子图问题。

    (感觉,“闭合”的意思是,所有点能走到的点都选择到了,不能走到其他集合里。就闭合了。)

    大概选择的是一条链,,

    也就是说,在满足合法的情况下,产生最优解。

    使用最小割建模方式如下:

    1.先把所有的正权点做和保存在ans

    2.建立两个点S,T,对于所有正权点p,连接S到p一条流量为权值的边。

    对于所有负权点q,连接一条q到T的流量为权值相反数(也就是绝对值)的边。

    对于原图(i,j)的有向边,对应网络中的(i,j)流量为inf的边。

    3.求原图的最小割c,ans=ans-c就是答案。

    证明:

    抓住要点:在合法性的前提下,最优化点的权值和。

    所以分开证明。

    1.合法性

    ans之前是所有正权点的权值和,意味着,这些点我们先选择上。

    但是,可能不合法,我们不得不舍弃一些正权点,或者选择一些负权点。

    可以发现,在最小割中,

    留下S到i的边,意味着选择这个正权点;切断i到T的边,意味着选择这个负权点。

    只要证明,如果选择了一个点,我一定选择了这个点的所有后继。

    如果选择了一个正权点,对应S到i的一条边

    那么,为了使得S到T不连通,它“下游”的所有走向T的边都要被砍断。

    而,对于它“下游”的所有S到i的边,它们的存在并不会影响S到T的联通性。所以由于是最小割,一定不会选择砍掉。

    那么后继就都选择上了。

    如果选择了一个负权点。

    其上游必然有一个正权点。否则,根据最小割,我们不会选择它。

    那么这个上游的正权点选择上了,根据上面的证明,那么这个负权点的下游也一定会被选上。

    2.最优化

    ans=正权点之和-牺牲的代价

    正权点之和是一个定值。

    最小割的大小就是牺牲的代价。

    由于最小割最小,所以ans最大。

    例题:

    [NOI2006]最大获利

    选择A,B可以有C的收益。

    不好处理。

    因为,多选择了一个信号站,可能造成很多收益,没办法统计。

    反过来。

    如果想要有C的收益,那么必须建立A,B信号站!

    所以,把每个用户看做一个点,向A,B连边。信号站权值-P,用户权值+C

    然后最大权闭合子图即可。

    [六省联考2017]寿司餐厅

    考虑品尝一个的di,j一定也会选择d>=i <=j的

    所以就是最大权闭合子图了

    减少边数,di,j->di,j-1,di+1,j

    对于di,i,连到某个-ai的点,连到象征ai的-ai*ai*m的点

    这样,最后选择的一定符合要求。收益di,j选择上了,花费也选择上了,并且满足“种”(即只算一次)和mx^2算且只算一次的要求。

  • 相关阅读:
    dede cms 怎样调用年月日
    织梦自定义表单提交成功后提示信息|跳转页面|跳转停留时间修改全攻略
    springmvc入门
    git全面理解
    mac os中try catch快捷键
    git与github关联
    mac下apache服务器访问DocumentRoot目录后报Forbidden错误
    分布式处理框架MapReduce
    资源调度框架YARN
    异常:failed on connection exception: java.net.ConnectException:
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10024863.html
Copyright © 2020-2023  润新知