传送门
题解:
1.二分图最大匹配模板题。关于匈牙利算法可以参考这里
2.直接上最大流Dinic/ISAP,牛刀杀鸡。。。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAXN=205,MAXM=205;
int n,m;
bool cov[MAXM],mp[MAXN][MAXM];
int link[MAXM];
bool dfs(int p) {
for (int i=1;i<=m;++i) {
if (mp[p][i]&&!cov[i]) {
cov[i]=true;
if (link[i]==-1||dfs(link[i])) {
link[i]=p;
return true;
}
}
}
return false;
}
int main() {
// freopen("poj 1274.in","r",stdin);
while (~scanf("%d%d",&n,&m)) {
memset(link,-1,sizeof(link));
memset(mp,false,sizeof(mp));
for (int i=1;i<=n;++i) {
int num,j;
scanf("%d",&num);
while (num--) {
scanf("%d",&j);
mp[i][j]=true;
}
}
int ans=0;
for (int i=1;i<=n;++i) {
memset(cov,false,sizeof(cov));
if (dfs(i)) ++ans;
}
printf("%d\n",ans);
}
return 0;
}