题目大意:在n*n的矩阵上有一些点,每次可以删除一行或一列上的所有点,问消除所有点的最小删除次数。
每个点要么被行删除,要么被列删除。建立二分图,对于点(x,y),从左边x到右边y连一条边,对于每一条连边,必须选择两边端点中的一个,所以二分图最小覆盖即为答案。
结论:二分图最小覆盖等于最大匹配(证明见百度百科Konig定理)
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 505
using namespace std;
struct Edge {
int from,to,nxt;
Edge() {}
Edge(