poj 1274(二分图最大匹配)

传送门
题解:
1.二分图最大匹配模板题。关于匈牙利算法可以参考这里
2.直接上最大流Dinic/ISAP,牛刀杀鸡。。。

#include
#include
#include
#include
using namespace std;
const int MAXN=205,MAXM=205;
int n,m;
bool cov[MAXM],mp[MAXN][MAXM];
int link[MAXM];
bool dfs(int p) {
    for (int i=1;i<=m;++i) {
        if (mp[p][i]&&!cov[i]) {
            cov[i]=true;
            if (link[i]==-1||dfs(link[i])) {
                link[i]=p;
                return true;
            }
        }
    }
    return false;
}
int main() {
//  freopen("poj 1274.in","r",stdin);
    while (~scanf("%d%d",&n,&m)) {
        memset(link,-1,sizeof(link));
        memset(mp,false,sizeof(mp));
        for (int i=1;i<=n;++i) {
            int num,j;
            scanf("%d",&num);
            while (num--) {
                scanf("%d",&j);
                mp[i][j]=true;
            }
        }
        int ans=0;
        for (int i=1;i<=n;++i) {
            memset(cov,false,sizeof(cov));
            if (dfs(i)) ++ans;
        }
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(图论)