最大权闭合子图

首先来说定义:

在一个有向图中,每个点都有一个点权:

  闭合子图:对于这个子图,它任意一个点的的后继必须在这个子图中; 

  最大权闭合子图:在所有的闭合子图中,该图的点权和最大;

求最大权闭合子图是标准的网络流建模模型;

  首先我们建立超级源S和超级汇T;把所有点权为正的点与S连接一条有向边,方向是从S到u,边权是点权;把所有点权为负的点与T连接一条有向边,方向是从u到T,边权是点权的相反数;原图中所有有向边的边权是INT_MAX;

  然后干什么呢?我们先看一看最大权闭合子图的定义:答案是(所有的正点权点的权值和-不在该图中的正点权点的权值和-在该图中负点权点的权值和)=(所有的正点权点的权值和-(不在该图中的正点权点的权值和+在该图中负点权点的权值和));

  对于所有正点权点的权值和,我们可以简单的预处理出来,关键是后面的部分怎么求;

  最小割的定义是在去除某些边后,S与T不连通,且去掉的边的权值和最小;

  我们考虑一下割掉的边的定义:若割掉的边与S相连,那么表示这条边所对应的点u不在最大权闭合子图中;若割掉的边与T相连,那么表示这条边所对应的点u在最大权闭合子图中;注意:所有割掉的边一定与S或T相连;

  假设S与T联通,那么一定存在一个点对(x,y),使得S到x有边,y到T有边,且存在一条x到y的路径;因为S到x有边,那么x在最大权闭合子图中,因为y到T有边,那么y不在最大权闭合子图中;而y一定是x的后继,所以y一定在最大权闭合子图中,这与之前的定义矛盾,所以条件不成立,S与T不连通;

  所以最小割就是(不在该图中的正点权点的权值和+在该图中负点权点的权值和);

  这就是后半部分的答案了;

  所以最大权闭合子图的权值和就是所有点的点权和-该生成图的最小割;

原文地址:https://www.cnblogs.com/kamimxr/p/11625659.html