POJ-1274 The Perfect Stall 二分匹配

简单二分匹配。

代码如下:

#include <cstring>
#include <cstdlib>
#include <cstdio>
#define MAXN 205
using namespace std;

int N, M, G[MAXN][MAXN];

int visit[MAXN], marry[MAXN];

int path(int u)
{
for (int i = 1; i <= M; ++i) {
if (!G[u][i] || visit[i]) {
continue;
}
visit[i] = 1;
if (!marry[i] || path(marry[i])) {
marry[i] = u;
return 1;
}
}
return 0;
}

int main()
{
int k, c, cnt;
while (scanf("%d %d", &N, &M) == 2) {
cnt = 0;
memset(G, 0, sizeof (G));
memset(marry, 0, sizeof (marry));
for (int i = 1; i <= N; ++i) {
scanf("%d", &k);
for (int j = 0; j < k; ++j) {
scanf("%d", &c);
G[i][c] = 1;
}
}
for (int i = 1; i <= N; ++i) {
memset(visit, 0, sizeof (visit));
if (path(i)) {
++cnt;
}
}
printf("%d\n", cnt);
}
return 0;
}



posted @ 2012-03-30 20:07  沐阳  阅读(227)  评论(0编辑  收藏  举报