首先有 推荐阅读。
定义
一个有向图, 每个点有点权 wi(可负), 要找到其一个子图, 满足:
-
对于原图中所有边 (u,v), 若点 u 在子图中, 则点 v 在子图中
-
子图的点权和最大
sol
新建一个网络图:
对于原图中的点, 若 wi > 0, 连边 (S, i, wi), 若 wi < 0, 连边 (i,T,-wi), 若 wi=0, 不做任何事。
对于原图中的边 (u,v), 连边 (u,v,+∞)。
答案就是 原图所有正点权之和 - 网络图最小割
证明:
或:
回忆最小割的理解:…………把所有点 分成两个集合 S,T, 最小化……(balabala)…………
回到那个网络图, 考虑把 “选” 看成和 S 在一个集合里, 把 “不选” 看成和 T 在一个集合里, 最小割的值是 “将物品分为选和不选损失的最小代价”。
那么对于 S 到正权物品的边,可以看成 “不选这个物品就要损失这个正权物品的权值”;
对于负权物品到 T 的边, 可以看成 “选这个物品就要损失这个负权物品的相反数”。
对于一个点对 (u,v), 若在原图的联通关系中, 选了 u 就必须选 v, 在这个网络图中很好体现, 具体地, 选了 u, 即 (S,u) 未断开, 即 (v,T) 必须断开, 即 (S,v) 不需要断开。(由于一句话里混了很多情况, 这里叙述的比较粗)