【图】O(VE)的匈牙利(C)

来源:互联网 发布:2016广告投放数据分析 编辑:程序博客网 时间:2024/06/09 19:28
#include<stdio.h>#include<string.h> bool g[201][201];int n,m,ans;bool b[201];int link[201]; bool init(){        int _x,_y;        memset(g,0,sizeof(g));        memset(link,0,sizeof(link));        ans=0;        if(scanf("%d%d",&n,&m)==EOF)return false;        for(int i=1;i<=n;i++)        {                scanf("%d",&_x);                for(int j=0;j<_x;j++)                {                        scanf("%d",&_y);                        g[ i ][_y]=true;                }        }        return true;} bool find(int a){        for(int i=1;i<=m;i++)        {                if(g[a][ i ]==1&&!b[ i ])                {                        b[ i ]=true;                        if(link[ i ]==0||find(link[ i ]))                        {                                link[ i ]=a;                                return true;                        }                }        }        return false;} int main(){        while(init())        {                for(int i=1;i<=n;i++)                {                        memset(b,0,sizeof(b));                        if(find(i))ans++;                }                printf("%d\n",ans);        }}

0 0