今天的快乐从0点开始!
心路历程
这题看数据范围就猜是网络流,没想到还真是。
思路
首先需要介绍闭合图:一个有向图,图内的每一个节点,它能到达的点也属于这个图,称这个图为闭合图。
将每个生意和超级源点(S)连边,容量为收益。
将每个下属和超级汇点(T)连边,容量为代价。
将每个生意,和每个要求的下属连边,容量为INF。
这样,满足条件的方案构成的图一定是原图的某个闭合子图。
将割掉一个(S)到生意的边,看成是放弃了这个生意;将割掉一个下属到(T)的边,看成是带上这个下属;如果存在(S)到(T)的流,就不符合条件了。所以最终的方案一定是原图的割。
然后就想到了最小割。由于生意和下属的连边为INF,最小割必不可能包含这些边。
然后,闭合图的权值 = 所有生意的收益和 - 未选生意的收益和 - 选择下属的代价和 = 所有生意收益和 - 割。
由此,最大权闭合子图的权值 = 所有生意的收益和 - 最小割大小。
根据最大流最小割定理,跑个dinic最大流完事。