poj 1274(二分图最大匹配)

来源:互联网 发布:注射水银 知乎 编辑:程序博客网 时间:2024/05/18 17:27

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

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>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;}
原创粉丝点击