【HDOJ】1068 Girls and Boys

匈牙利算法,最开始暴力解不知道为什么就是wa,后来明白,一定要求最优解。查了一下匈牙利算法相关内容,大致了解。

 1 #include <stdio.h>
 2 #include <string.h>
 3 
 4 #define MAXNUM 505
 5 
 6 int map[MAXNUM][MAXNUM];
 7 int visit[MAXNUM];
 8 int link[MAXNUM];
 9 
10 int dfs(int x, int n) {
11     int i;
12 
13     for (i=0; i<n; ++i) {
14         if (visit[i]==0 && map[x][i]) {
15             visit[i] = 1;
16             if (link[i]==-1 || dfs(link[i], n)) {
17                 link[i] = x;
18                 return 1;
19             }
20         }
21     }
22     return 0;
23 }
24 
25 int main() {
26     int n, reln, tmp;
27     int i, j, k;
28 
29     while (scanf("%d", &n) != EOF) {
30         memset(map, 0, sizeof(map));
31         memset(link, -1, sizeof(link));
32         for (i=0; i<n; ++i) {
33             scanf("%d: (%d)", &k, &reln);
34             for (j=0; j<reln; ++j) {
35                 scanf("%d", &tmp);
36                 map[k][tmp] = 1;
37             }
38         }
39         tmp = 0;
40         for (i=0; i<n; ++i) {
41             memset(visit, 0, sizeof(visit));
42             if ( dfs(i, n) )
43                 tmp++;
44         }
45         if (tmp&1)
46             tmp++;
47         printf("%d
", n-tmp/2);
48     }
49 
50     return 0;
51 }
原文地址:https://www.cnblogs.com/bombe1013/p/3641738.html