#include<iostream> #include<cstdio> #include<cstring> using namespace std; int data[205][205],link[205],visit[205],count,n,m; bool dfs(int x){ for(int j=1;j<=m;j++){ if(data[x][j]&&!visit[j]){ visit[j] = 1; if(link[j]==0||dfs(link[j])){ link[j] = x; return true; } } } return false; } void hungery(){ for(int i=1;i<=n;i++){ memset(visit,0,sizeof visit); if(dfs(i)){ count++; } } } int main(){ int i,j,p,q; while(scanf("%d%d",&n,&m)==2){ memset(data,0,sizeof data); for(i=1;i<=n;i++){ scanf("%d",&p); for(j=1;j<=p;j++){ scanf("%d",&q); data[i][q] = 1; } } count = 0; memset(link,0,sizeof link); hungery(); printf("%d\n",count); } return 0; }
原文:https://www.cnblogs.com/stevenzrx/p/15141053.html