hdu1274 二分图匹配匈牙利算法

来源:互联网 发布:像素绘画软件下载 编辑:程序博客网 时间:2024/05/29 18:45
#include<cstdio>#include<cstring>using namespace std;const int maxn=300;int n,m,i,j;int cp[maxn][maxn],visit[maxn],live[maxn],num,room,sum;///live[]记录牛舍住了哪只牛,cp[i][j]表示牛i喜欢住牛舍jbool dfs(int x){    for(int i=1;i<=m;i++)    {        if(!visit[i]&&cp[x][i])        {            visit[i]=1;            if(live[i]==-1||dfs(live[i]))            {                live[i]=x;                return true;            }        }    }    return false;}int main(){    while(scanf("%d%d",&n,&m)!=EOF)    {        sum=0;        memset(cp,0,sizeof(cp));        memset(live,-1,sizeof(live));        for(i=1;i<=n;i++)        {            scanf("%d",&num);        for(j=1;j<=num;j++)        {            scanf("%d",&room);            cp[i][room]=1;        }        }        for(int k=1;k<=n;k++)            {                memset(visit,0,sizeof(visit));                if(dfs(k)) sum++;            }            printf("%d\n",sum);    }    return 0;}