匈牙利算法,最开始暴力解不知道为什么就是wa,后来明白,一定要求最优解。查了一下匈牙利算法相关内容,大致了解。
#include <stdio.h>
#include <string.h> #define MAXNUM 505 int map[MAXNUM][MAXNUM];
int visit[MAXNUM];
int link[MAXNUM]; int dfs(int x, int n) {
int i; for (i=; i<n; ++i) {
if (visit[i]== && map[x][i]) {
visit[i] = ;
if (link[i]==- || dfs(link[i], n)) {
link[i] = x;
return ;
}
}
}
return ;
} int main() {
int n, reln, tmp;
int i, j, k; while (scanf("%d", &n) != EOF) {
memset(map, , sizeof(map));
memset(link, -, sizeof(link));
for (i=; i<n; ++i) {
scanf("%d: (%d)", &k, &reln);
for (j=; j<reln; ++j) {
scanf("%d", &tmp);
map[k][tmp] = ;
}
}
tmp = ;
for (i=; i<n; ++i) {
memset(visit, , sizeof(visit));
if ( dfs(i, n) )
tmp++;
}
if (tmp&)
tmp++;
printf("%d\n", n-tmp/);
} return ;
}