http://acm.hdu.edu.cn/showproblem.php?pid=1569
题解:网络流+最大流+最小割
把格子染成黑白两色,形如下图: 有点丑。。好吧,不止一点
其实黑白两色也可以反过来,不过这不是重点。
我们把每个格标个号:
然后我们可以把格子抽象成一个点,然后分开:
最后就是连边:
左边那个蓝蓝的是源点,然后那个白色的大圈是汇点。
从源点连向黑点的边的权值(容量)是那个黑点的值,然后从白点连向汇点的边也是权值。
两边的点时候不能同时选的(因为有公共边),边权是INF(尽量大)。
题目要求最大点权独立集(注意:是点权),就等于所有点的值减去最小点权覆盖集,就是减去最小割(最大流)。
/*
*@Author: STZG
*@Language: C++
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include