二分图最大匹配

来源:互联网 发布:黄子华 知乎 编辑:程序博客网 时间:2024/05/01 07:23
#include<iostream>#include<cstdio>using namespace std;#define N 510int map[N][N];int state[N];int match[N];int n,m;bool dfs(int x){for(int i=1;i<=m;i++){if(state[i]==0&&map[x][i]==1){state[i]=true;if(match[i]==-1||dfs(match[i])==true){match[i]=x;return true;}}}return false;}int sum(){int ans=0;for(int i=1;i<=n;i++){memset(state,0,sizeof(state));if(dfs(i)==true) ans++;}return ans;}int main(){int i,j,a,b;while(scanf("%d%d",&n,&m)!=EOF){for(i=1;i<=n;i++){for(j=1;j<=m;j++){map[i][j]=0;}}memset(match,-1,sizeof(match));for(i=1;i<=n;i++){scanf("%d",&a);for(j=0;j<a;j++){scanf("%d",&b);map[i][b]=1;}}printf("%d\n",sum());}return 0;}


原创粉丝点击