例子就以sicnuoj的题,http://acm-sicnu.com/problem/32/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int match[200][400] = {0};
int lib[400] = {0}, used[400] = {0};
int n, m, no, sum = 0;
int find(int x)
{
int i;
for(i = 1; i <= m; i++)
{
if(match[x][i] == 1 && used[i] == 0)
{
used[i] = 1;
if(lib[i] == 0 || find(lib[i]))
{
lib[i] = x;
return 1;
}
}
}
return 0;
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
int k;
cin >> k;
for(int j = 1; j <= k; j++)
{
cin >> no;
match[i][no] = 1;
}
}
for(int i = 1; i <= n; i++)
{
memset(used, 0, sizeof(used));
if(find(i)) sum++;
}
printf("%d\n", sum);
return 0;
}