一个定理:二分图的最小点权覆盖集对应最大点权独立集
最小点权覆盖集的建图方法:
1、增加源点 s,连接 s 到 x 集合中所有点,边权是相应点的点权
2、增加汇点 t,连接 y 集合中所有点到 t,边权是相应点的点权
3、对原图中的边,将边权变成无穷大
此图的最大流就是二分图的最小点权覆盖,所有点权的和减去最大流就是此图的最大点权独立集
相关题目:hdu 1565 方格取数(1) hdu 1569方格取数(2)
贴一个代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <list>
#define INT_INF 0x3fffffff
#define LL_INF 0x3fffffffffffffff
#define EPS 1e-12
#define MOD 1000000007
#define PI 3.141592653579798
#define N 3000
#define E 100000
using namespace s