POJ 1274 The Perfect Stall
二分图匹配的水题,和上一篇一样水过。。。当练练手吧
直接上代码
#include <stdio.h>
#include <string.h>
int n, m;
int map[205][205];
int vis[205];
int zg[205];
int i, j;
int barn_num;
int cow;
int xi(int n)
{
int i;
for (i = 1; i <= m; i ++)
{
if (vis[i] == 0 && map[n][i] == 1)
{
vis[i] = 1;
if (zg[i] == -1 || xi(zg[i]))
{
zg[i] = n;
return 1;
}
}
}
return 0;
}
int main()
{
while (scanf("%d%d", &n, &m) != EOF)
{
int num = 0;
memset(map, 0, sizeof(map));
memset(vis, 0, sizeof(vis));
memset(zg, 0, sizeof(zg));
for (i = 1; i <= m ; i ++)
zg[i] = -1;
for (i = 1; i <= n; i ++)
{
scanf("%d", &barn_num);
while (barn_num -- )
{
scanf("%d", &cow);
map[i][cow] = 1;
}
}
for (i = 1; i <= n; i ++)
{
memset(vis, 0, sizeof(vis));
if (xi(i))
{
num ++;
}
}
printf("%d\n", num);
}
return 0;
}