标签:
http://poj.org/problem?id=1466
Time Limit: 5000MS | Memory Limit: 10000K | |
Total Submissions: 11085 | Accepted: 4956 |
Description
Input
Output
Sample Input
7 0: (3) 4 5 6 1: (2) 4 6 2: (0) 3: (0) 4: (2) 0 1 5: (1) 0 6: (2) 0 1 3 0: (2) 1 2 1: (1) 0 2: (1) 0
Sample Output
5 2
最大独立集 = 总点数 - 最大匹配数
因为本题将人数扩大2倍,所以最大匹配数应除以2
#include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<algorithm> #define N 510 #define INF 0x3f3f3f3f using namespace std; int G[N][N], vis[N], used[N]; int n; bool Find(int u) { int i; for(i = 0 ; i < n ; i++) { if(!vis[i] && G[u][i]) { vis[i] = 1; if(!used[i] || Find(used[i])) { used[i] = u; return true; } } } return false; } int main() { int i, a, b, m, ans; while(~scanf("%d", &n)) { ans = 0; memset(G, 0, sizeof(G)); for(i = 1 ; i <= n ; i++) { scanf("%d: (%d)", &a, &m); while(m--) { scanf("%d", &b); G[a][b] = 1; } } memset(used, 0, sizeof(used)); for(i = 0 ; i < n ; i++) { memset(vis, 0, sizeof(vis)); if(Find(i)) ans++; } printf("%d\n", n - ans / 2); } return 0; }
poj 1466 Girls and Boys(二分图的最大独立集)
标签:
原文地址:http://www.cnblogs.com/qq2424260747/p/4718439.html