Problem1128--[视频]最大独立集1(二分图)(元问题byscy)

1128: [视频]最大独立集1(二分图)(元问题byscy)

Time Limit: 2 Sec  Memory Limit: 128 MB
Submit: 1  Solved: 1
[Status] [Submit] [Creator:]

Description

X集合有n个点,Y集合有m个点,同个集合内的任意两点没有边,
有k条边,每条边的两个端点一个来自X集合,另一个来自Y集合。
问题:选出某些点组成一个集合,使得集合中的任意两点之间没有边相连,问这个集合最多可以包含多少个点?

Input
数据第一行三个整数n, m (1 ≤ n, m ≤ 10000) and k (0 ≤ k ≤ n × m 且 k<= 10^6),
下来k行,每行两个整数 x and y (1 ≤ x ≤ n,1 ≤ y ≤ m), 表示一条边的两个端点。

Output
输出一行,一个整数,即集合最多可以包含点的个数

Sample Input
3 3 4
1 1
1 2
2 2
3 2

Sample Output
4


 

最大独立集定理证明:(引用:http://m.blog.csdn.net/Techmonster/article/details/50011363

上图,我们用两个红色的点覆盖了所有边。我们证明的前提条件是已经达到
最小覆盖(即满足:条件1.已经覆盖所有边;条件2.所用的点数最小)


首先我们来证明蓝色点组成的是一个独立集:
如果有两个蓝色点间有边相连,那么这条边则没有被覆盖,则与条件1矛盾。因此是独立集。

再来证明这个独立集最大:
如果我们要再增加这个独立集中的点,则需要把某个红点变成蓝点。
而由最小覆盖数=最大匹配数的证明我们知道,每一个红点是最大匹配中的一
个匹配点,也就是说每个红点至少连接了一条边。因此当我们将某个红点变成蓝点
时,我们需要牺牲的蓝点的个数是大于等于1的。也就是说,我们最多只能找到数量相等
的其他独立集,而无法找到数量更大的。因此蓝色点集必定为最大独立集。

蓝色点数 =总点数 - 红色点数,即最大独立集=总数-最小覆盖集。


Source/Category

byscy