最小点覆盖集之例题
来源:互联网 发布:tinyumbrella mac版 编辑:程序博客网 时间:2024/05/24 06:17
POJ-3041 Asteroids
题意:
给一个N*N的矩阵,一些星球位于一些点上,要求消除所有星球,每次操作可消除一行或一列的星球,求最少要几次。
思路:
以行和列为点,星球所在行和列的关系建边,建完图之后就会发现求最小点覆盖集。
代码1:
#include <string.h>#include <cstdio>using namespace std;const int maxn = 505;int G[maxn][maxn], vis[maxn], match[maxn];int n, k;int dfs(int cur){for(int i = 1; i <= n; ++i){if(!G[cur][i] || vis[i]) continue;vis[i] = 1;if(match[i] == -1 || dfs(match[i])){match[i] = cur;return 1;}}return 0;}int main(){int u, v, ans = 0;memset(G, 0, sizeof G);memset(match, -1, sizeof match);scanf("%d %d", &n, &k);for(int i = 1; i <= k; ++i){scanf("%d %d", &u, &v);G[u][v] = 1;}for(int i = 1; i <= n; ++i){memset(vis, 0, sizeof vis);if(dfs(i)) ++ans;}printf("%d\n", ans);return 0;}
HDU-1054 Strategic Game
题意:
给定一个树形图,寻找最少点去覆盖所有的边。
思路:
利用二分图特权将一个点拆成两点然后进行求解最大匹配即最小点覆盖集,再除2就是answer。
这题有蜜汁WA点,用邻接矩阵存边会超时,煞是无语。
代码2:
#include <algorithm>#include <string.h>#include <cstdio>#include <vector>using namespace std;const int maxn = 1505;int match[maxn], vis[maxn];vector<int> G[maxn];int n;int dfs(int cur){int len = G[cur].size();for(int i = 0; i < len; ++i){if(vis[G[cur][i]]) continue;vis[G[cur][i]] = 1;if(match[G[cur][i]] == -1 || dfs(match[G[cur][i]])){match[G[cur][i]] = cur;return 1;}}return 0;}int main(){int up, x, ans, t;while(~scanf("%d", &n)){for(int i = 0; i < n; ++i) G[i].clear(); ans = 0;memset(match, -1, sizeof match);for(int i = 0; i < n; ++i){scanf("%d:(%d)", &t, &up);for(int j = 0; j < up; ++j){scanf("%d", &x);G[t].push_back(x);G[x].push_back(t);}}for(int i = 0; i < n; ++i){memset(vis, 0, sizeof vis);if(dfs(i)) ++ans;}printf("%d\n", ans/2);}return 0;}
继续加油~
阅读全文
1 0
- 最小点覆盖集之例题
- 最小路径覆盖,最小点覆盖,最大独立点集
- 最小路径覆盖,最小点覆盖,最大独立点集
- 二分图变种之最小路径覆盖、最小点覆盖集【poj3041】【poj2060】
- pku2226 最小点集覆盖,行列覆盖
- 行列覆盖,最小点集覆盖
- 最小点集覆盖圆
- 点集最小覆盖圆
- 最小覆盖点集模板
- 最小点集覆盖/HDU2119
- HDU 2119 Matrix【二分图之最小点集覆盖】
- hdu 2119 二分图匹配之最小点集覆盖
- 最小点集覆盖与最大匹配之匈牙利算法
- 最小路径覆盖,最小点覆盖,最大独立点集,最小边覆盖
- 最大独立集 最小点覆盖 最小边覆盖 最小路径覆盖 最大团
- 最小点覆盖,最小边覆盖,最大匹配,最小路径覆盖,最大独立集总结。
- 网络流之--最小点权覆盖和最大点权独立集
- 网络流之--最小点权覆盖和最大点权独立集
- 如果搭建ThinkPHP的环境
- 常用Vim命令及快捷键
- PAT 1068万绿丛中一点红
- 【shell】结构控制-判断语句
- Js递归方法解决猴子吃桃问题
- 最小点覆盖集之例题
- 查找一个字符串中第一个只出现两/一次的字符
- 山东省第八届acm省赛 company
- ios-延展Extension
- 程序设计思维
- 集群基础-----(fence的安装)
- 新知识学习体会
- 三次握手四次挥手
- Linux 第三天 shell及minimal镜像,免密登录