hdoj-1068(二分图的最小点覆盖)

Posted xidian-mao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdoj-1068(二分图的最小点覆盖)相关的知识,希望对你有一定的参考价值。

题目

       1  问题转化: 求二分图最小点覆盖(覆盖所有的边)

       2  问题的解决: 二分图最小点覆盖==其最大匹配数

       3   证明: 链接

 1 =#include <bits/stdc++.h>
 2 using namespace std;
 3 const int N = 1001;
 4 vector < vector <int> > g(N);
 5 int match [N];
 6 bool visit[N];
 7 int n;
 8 bool dfs (int x) {
 9     for (int i=0;i<g[x].size();i++) {
10         int t=g[x][i];
11         if (!visit[t]) {
12             visit[t]=1;
13             if (match[t]<0||dfs(match[t])) {
14                 match[t]=x;
15                 return 1;
16             }
17         } 
18     }
19     return 0;
20 }
21 int main ()
22 {
23     while (~scanf ("%d", &n)) {
24         for (int i=0;i<n;i++)  g[i].clear();
25         memset (match,-1,sizeof(match));
26         for (int i = 1; i <= n; i++) {
27             int id, num;
28             scanf ("%d: (%d)", &id, &num);
29             for (int j = 0; j < num;j++) {
30                 int u; scanf ("%d", &u);
31                 g[id].push_back(u);
32             }
33         }
34         int ans = 0;
35         for (int i = 0; i < n; i++) {
36             memset (visit, 0, sizeof(visit));
37             if (dfs(i)) ans++;
38         }
39         printf("%d
", n - ans / 2);// 为什么/2  因为二分图两边都遍历了
40     }
41     return 0;
42 }

 

以上是关于hdoj-1068(二分图的最小点覆盖)的主要内容,如果未能解决你的问题,请参考以下文章

图论二分图的应用(染色法判断二分图,最大匹配,最小点覆盖,最大独立集,最小路径点覆盖,最小路径重复点覆盖)

二分图的性质

二分图的最小顶点覆盖 最大独立集 最大团

二分图的最小顶点覆盖 最大独立集 最大团

二分图的一些定理

最小点覆盖POJ3041-Asteroids