zoukankan      html  css  js  c++  java
  • 学习笔记 最大闭合权子图

    写在之前

    最近又开始更新博客了 所以就学习了一些之前没有学过的东西

    正式开始

    什么是最大权闭合子图?

    首先 我们需要明白 什么是闭合子图

    首先 子图我们很好明白

    至于闭合子图 就是子图中所有的点 他们的出度指向的点也在这个子图中

    我们来一个DAG网上找的 上图理解一下

    在这幅图中 {1,2,3,4},{4.5},{2,4,5}都是闭合子图

    但是 {1,2,5}就不是 因为点1一个出度指向的点4不在这幅子图当中

    这就是闭合子图的概念

    如果加上点权的话 那么所有闭合子图当中点权和最大的就是最大权闭合子图

    怎么求最大权闭合子图?

    求解方式:最大流最小割

    首先我们建立符合最大流的图

    建立一个超级源s 和一个超级汇t

    然后所有的正权点都和s相连 容量为其点权

    所有的负权点都和t相连 容量为其点权的绝对值

    然后 再按照原图的关系连边 容量为无穷大

    然后够我们跑最小割 也就是最大流就可以了

    为什么这样子建图?

    请注意 我们现在跑的是最小割

    所以 一个点的出度的点之间的边由于容量是无穷大 所以不可能被割掉

    这也就是保证了闭合子图的成立

    所以 我们只会割掉 s与正点权的点之间的边 以及负点权的点与t之间的边

    最后的图就被我们分为了两部分 在最大权闭合子图里的和不在最大权闭合子图里的

    最后 我们的答案 正点权的点权和 - 最小割 = 正点权的点权和 - (不在最大闭合子图正点权点权和 + 在最大权闭合子图里的负点权绝对值和) = 在最大闭合子图正点权点权和 - 在最大权闭合子图里的负点权绝对值和

    这就是我们要的答案

    现在 我们可以上题了

    【luogu2762】

    【luogu2805】

  • 相关阅读:
    在 ASP.NET 中实现会话状态的基础
    STL 备忘录
    ASP.NET开发环境的详细配置
    COFF 文件的格式
    mbstowcs and MultiByteToWideChar
    苦心人天不负
    CString GetBuffer() and ReleaseBuffer()
    c语言的函数指针
    如何架设流媒体服务器(2)
    再谈从vc6迁移到vs2005
  • 原文地址:https://www.cnblogs.com/LovToLZX/p/13796337.html
Copyright © 2011-2022 走看看