简单二分匹配

代码如下:

#include <stdio.h>
#include <string.h>
#define MAXN 100

int G[MAXN][305], N;
int marry[305], visit[305];

int path(int u)
{
for (int i = 1; i <= N; ++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 t, d, h, count = 0;
while (scanf("%d", &N) == 1) {
count = 0;
memset(G, 0, sizeof (G));
memset(marry, 0, sizeof (marry));
for (int i = 1; i <= N; ++i) {
scanf("%d", &t);
for (int j = 0; j < t; ++j) {
scanf("%d %d", &d, &h);
G[(d-1)*12+h][i] = 1;
}
}
for (int i = 1; i <= 84; ++i) {
memset(visit, 0, sizeof (visit));
if (path(i))
++count;
}
printf("%d\n", count);
}
return 0;
}



相关文章:

  • 2022-12-23
  • 2021-12-04
  • 2021-11-25
  • 2022-12-23
  • 2021-08-07
  • 2022-12-23
  • 2022-02-17
  • 2021-11-26
猜你喜欢
  • 2021-09-05
  • 2021-07-18
  • 2022-12-23
  • 2021-07-14
  • 2022-12-23
  • 2021-05-18
相关资源
相似解决方案