二分图带权最大独立集

来源:互联网 发布:石油大学华东网络教育 编辑:程序博客网 时间:2024/05/29 04:55

问题:在一个二分图中,每个点都有一个权值,在保证选中的点不相交的情况下,求选出的点的最大权值和

解法:【最小割】

前提是能把图分成二分图,比如矩阵的格子点,同一侧的各个点不会有边相连。

源点向X集合连流量为权值的边,Y集合各点向汇点连流量为权值的边。

X与相连的Y连流量为INF的边。

对于任意一个割集,与割相连的点都删掉就会得到一个独立点集。(割边只能是源点到X,和Y到汇点的边)

因此最后的答案就是所有点的权值和-最小割的容量。


HOJ 2713  http://acm.hit.edu.cn/hoj/problem/view?id=2713


【题目大意】
一个 N*M 的网格,每个单元都有一块价值 Cij 的宝石。问最多能取多少价值的宝
石且任意两块宝石不相邻。 (1 <= N, M <= 50, 0 <= Cij <= 40000)
【建模方法】
经典的 最大点权独立集问题。转化为 最小点权覆盖集:先将网格黑白染色,从源
点到每个黑点有一条边, 从每个白点到汇点有一条边, 容量均为相应宝石的价值。
每个黑点向与其相邻的四个白点连边,容量为∞。设最小割为 ans,结果即为∑
Cij – ans。

代码 http://paste.ubuntu.com/12243048/


0 0
原创粉丝点击