【二分图】HDU1150 最小顶点覆盖

二分图小总结:

1、最小顶点覆盖 = 最大匹配数

最小顶点覆盖:实质是个点集,点集里面的点能覆盖所有的边,最小点覆盖就是满足这个要求的点集中点数最小的那个

2、最大独立集 =  顶点个数V - 最大匹配数

最大独立集:实质是个点集,点集里面的点互相之间不连着,最大独立集就是满足这个要求的点集中点数最多的那个

3、最小边覆盖 = 顶点个数V - 最大匹配数

最小边覆盖:实质是个边集,这个集合里的边能覆盖所有的点,最小边覆盖是满足这个要求的所有边集中边数最少的一个

这里顶点数等于总的顶点数

 

  • HDU 1150 (最小顶点覆盖)
#include 
#include 
#include 
#include 
using namespace std;

int Map[105][105];
int match[105]; ///匹配
int vis[105]; ///访问
int n,m;

int Find(int x){
    for(int i=1; i<=m; i++)
        if(vis[i] == 0 && Map[x][i]){
            vis[i] = 1;
            if(match[i] == -1 || Find(match[i])){
                match[i] = x;
                return 1;
            }

        }

    return 0;
}

int main()
{
    int k;
    while(1){
        scanf("%d", &n);
        if(!n) break;
        scanf("%d%d", &m, &k);
        memset(Map, 0, sizeof Map);
        memset(match, -1, sizeof match);
        for(int i=0; i

 

你可能感兴趣的:(二分图匹配,图论)