题目链接:
http://poj.org/problem?id=2987
题意:
现在有一群人,开除每个人都会有一个相应的收益(可正可负)。
另给出他们之间的上下级关系,如果开除一个人就必须开除他的下属,以及他下属的下属,依次类推……
求最大收益的值以及在保证最大收益的前提下最少开除多少人。
算法:
有向图的最大权闭合子图——即闭合图内的任意点的任意后继也一定在闭合图中。
Amber的《最小割模型在信息学竞赛中的应用》里面已经讲解的非常清晰了。
从S到每一个点建一条边,权值为该点权值的绝对值。若该点权值为负,则由该点向T建边,权值为该点权值的绝对值。
若存在边(u, v),则由u 建一条到v 的边,流量为无限大。
最大收益为:正权值点的权值和 - 最小割
S割集为最大权闭合子图中的点,即应该被开除的人。
代码:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include