poj 1466 Girls and Boys 最大独立集
根据性别分为两个集合,然后求最大独立集。由于题目没有给出性别,可以不划分集合,每个集合都为n个,求最大匹配数,最后除2即可。
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 505; int maze[N][N]; bool isvisit[N]; int match[N]; int n; bool find(int u) { for (int i = 0; i < n; i++) { if (maze[u][i] && !isvisit[i]) { isvisit[i] = true; if (match[i] == -1 || find(match[i])) { match[i] = u; return true; } } } return false; } int main() { int num; int j, s; while (scanf("%d", &n) != EOF) { memset(maze, false, sizeof(maze)); for (int i = 0; i < n; i++) { scanf("%d: (%d)", &s, &num); while (num--) { scanf("%d", &j); maze[i][j] = true; } } int ans = 0; memset(match, -1, sizeof(match)); for (int i = 0; i < n; i++) { memset(isvisit, false, sizeof(isvisit)); if (find(i)) ans++; } cout << n - ans/2 << endl; } return 0; }