POJ 1466 Girls and Boys【最大点独立集】

大意:最大点独立集

分析:最大点独立集

代码:

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <vector>
 5 using namespace std;
 6 
 7 const int maxn = 505;
 8 
 9 int n;
10 int Link[maxn];
11 int vis[maxn];
12 vector<int> G[maxn];
13 bool Find(int u) {
14     for(int i = 0; i < G[u].size(); i++) {
15         int v = G[u][i];
16         if(!vis[v]) {
17             vis[v] = 1;
18             if(Link[v] == -1 || Find(Link[v])) {
19                 Link[v] = u;
20                 return true;
21             }
22         }
23     }
24     return false;
25 }
26 
27 int solve() {
28     memset(Link, -1, sizeof(Link));
29     int ans = 0;
30     for(int i = 0; i < n; i++) {
31         if(G[i].size()) {
32             memset(vis, 0, sizeof(vis));
33             if(Find(i)) ans ++;
34         }
35     }
36     return ans;
37 }
38 
39 int main() {
40     int a, num, b;
41     while(EOF != scanf("%d",&n)) {
42         for(int i = 0; i < n; i++) {
43             G[i].clear();
44         }
45         for(int i = 0; i < n; i++) {
46             scanf("%d: (%d)", &a, &num);
47             for(int j = 0; j < num; j++) {
48                 scanf("%d",&b);
49                 G[a].push_back(b);
50             }
51         }
52         printf("%d\n", ( 2 * n - solve() ) / 2 );
53     }
54     return 0;
55 }
View Code

 

posted @ 2014-08-27 21:54  悠悠我心。  阅读(129)  评论(0编辑  收藏  举报