水!瞬秒的题目!如有不懂,就看算法吧!但愿这次比赛有这样水的题目,哈哈!
代码:
#include <cstdio>
#include <cstring>
const int N = 220;
int ln, rn, bmap[N][N], cy[N];
bool used[N];
bool dfs( int u )
{
for ( int v = 1; v <= rn; ++v ) if ( bmap[u][v] && !used[v] ) {
used[v] = 1;
if ( cy[v] == -1 || dfs( cy[v] ) ) {
cy[v] = u;
return 1;
}
}
return 0;
}
int match()
{
int res = 0;
memset( cy, -1, sizeof(cy));
for ( int i = 1; i <= ln; ++i ) {
memset( used, 0, sizeof(used));
if ( dfs(i) ) res++;
}
return res;
}
int main()
{
while ( scanf("%d%d", &ln, &rn) == 2 ) {
memset( bmap, 0, sizeof(bmap));
for ( int i = 1; i <= ln; ++i ) {
int num;
scanf("%d", &num);
while ( num-- ) {
int v;
scanf("%d", &v);
bmap[i][v] = 1;
}
}
printf("%d\n", match());
}
}