poj 1274 基础二分最大匹配

#include<stdio.h>
#include<string.h>
#define N 300
#define inf 0x3fffffff
int mark[N],link[N],n,m;
int map[N][N];
int find(int u) {
int i;
for(i=1;i<=m;i++) {
    if(!mark[i]&&map[u][i]) {
        mark[i]=1;
        if(link[i]==-1||find(link[i])) {
            link[i]=u;
            return 1;
        }
    }
}
return 0;
}
int main() {
    int i,k,s,t;
    while(scanf("%d%d",&n,&m)!=EOF) {
        memset(map,0,sizeof(map));
        memset(link,-1,sizeof(link));
        for(i=1;i<=n;i++) {
            scanf("%d",&s);
            while(s--) {
                scanf("%d",&t);
                map[i][t]=1;
            }
        }
        k=0;
    for(i=1;i<=n;i++) {
        memset(mark,0,sizeof(mark));
        k+=find(i);
    }
    printf("%d ",k);
    }
return 0;
}

原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410789.html