学习笔记 最大闭合权子图

写在之前

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

正式开始

什么是最大权闭合子图?

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

首先 子图我们很好明白

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

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

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

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

这就是闭合子图的概念

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

怎么求最大权闭合子图?

求解方式:最大流最小割

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

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

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

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

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

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

为什么这样子建图?

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

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

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

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

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

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

这就是我们要的答案

现在 我们可以上题了

【luogu2762】

【luogu2805】

posted @ 2020-10-11 09:56  tcswuzb  阅读(180)  评论(0编辑  收藏  举报