#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;
int d[201];
bool f[201][201],p[201];
int i,j,k,m,n,si,like;
int dfs(int x){
for(int u=1;u<=m;u++){
if(f[x][u] && !p[u]){
p[u]=1;
if(!d[u] || dfs(d[u]))
d[u]=x;
return 1;}
}
return 0;}
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&si);
while(si--){
scanf("%d",&like);
f[i][like]=1;
}
}
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)p[j]=0;
dfs(i);
}
int ans=0;
for(i=1;i<=m;i++){
if(d[i])ans++;
}
cout<<ans;
return 0;
}
POJ 1274 The Perfect Stall 题解 (二分匹配)
最新推荐文章于 2018-10-19 21:07:42 发布