[POJ3020]Antenna Placement(二分图最大匹配,最小边覆盖)
题目链接:http://poj.org/problem?id=3020
题意:要求用最少的1*2的边数覆盖掉图上的所有*
在专题里看这个图很高能所以不敢做,其实是最小边覆盖的裸题,先给*标号,随后按照每个*附近是否有*来构造二分图。
最后结果 最小边覆盖 = 节点数 - 最大匹配 (虽然和最小路径覆盖结果一样,但是是完全不同的两个事情).
最大匹配是这个图上匹配的1/2,因为建图的时候是双向的。
1 /* 2 ━━━━━┒ギリギリ♂ eye! 3 ┓┏┓┏┓┃キリキリ♂ mind! 4 ┛┗┛┗┛┃\○/ 5 ┓┏┓┏┓┃ / 6 ┛┗┛┗┛┃ノ) 7 ┓┏┓┏┓┃ 8 ┛┗┛┗┛┃ 9 ┓┏┓┏┓┃ 10 ┛┗┛┗┛┃ 11 ┓┏┓┏┓┃ 12 ┛┗┛┗┛┃ 13 ┓┏┓┏┓┃ 14 ┃┃┃┃┃┃ 15 ┻┻┻┻┻┻ 16 */ 17 #include <algorithm> 18 #include <iostream> 19 #include <iomanip> 20 #include <cstring> 21 #include <climits> 22 #include <complex> 23 #include <fstream> 24 #include <cassert> 25 #include <cstdio> 26 #include <bitset> 27 #include <vector> 28 #include <deque> 29 #include <queue> 30 #include <stack> 31 #include <ctime> 32 #include <set> 33 #include <map> 34 #include <cmath> 35 using namespace std; 36 #define fr first 37 #define sc second 38 #define cl clear 39 #define BUG puts("here!!!") 40 #define W(a) while(a--) 41 #define pb(a) push_back(a) 42 #define Rint(a) scanf("%d", &a) 43 #define Rs(a) scanf("%s", a) 44 #define Cin(a) cin >> a 45 #define FRead() freopen("in", "r", stdin) 46 #define FWrite() freopen("out", "w", stdout) 47 #define Rep(i, len) for(int i = 0; i < (len); i++) 48 #define For(i, a, len) for(int i = (a); i < (len); i++) 49 #define Cls(a) memset((a), 0, sizeof(a)) 50 #define Clr(a, x) memset((a), (x), sizeof(a)) 51 #define Full(a) memset((a), 0x7f7f7f, sizeof(a)) 52 #define lrt rt << 1 53 #define rrt rt << 1 | 1 54 #define pi 3.14159265359 55 #define RT return 56 #define lowbit(x) x & (-x) 57 #define onecnt(x) __builtin_popcount(x) 58 typedef long long LL; 59 typedef long double LD; 60 typedef unsigned long long ULL; 61 typedef pair<int, int> pii; 62 typedef pair<string, int> psi; 63 typedef pair<LL, LL> pll; 64 typedef map<string, int> msi; 65 typedef vector<int> vi; 66 typedef vector<LL> vl; 67 typedef vector<vl> vvl; 68 typedef vector<bool> vb; 69 70 const int maxn = 1910; 71 int nu, nv; 72 int G[maxn][maxn]; 73 int linker[maxn]; 74 bool vis[maxn]; 75 76 bool dfs(int u) { 77 For(v, 1, nv+1) { 78 if(G[u][v] && !vis[v]) { 79 vis[v] = 1; 80 if(linker[v] == -1 || dfs(linker[v])) { 81 linker[v] = u; 82 return 1; 83 } 84 } 85 } 86 return 0; 87 } 88 89 int hungary() { 90 int ret = 0; 91 Clr(linker, -1); 92 For(u, 1, nu+1) { 93 Cls(vis); 94 if(dfs(u)) ret++; 95 } 96 return ret; 97 } 98 99 const int dx[5] = {0, 0, 1, -1}; 100 const int dy[5] = {1, -1, 0, 0}; 101 int n, m; 102 int mp[maxn][maxn]; 103 int ord; 104 char tmp[maxn]; 105 106 bool ok(int x, int y) { 107 return x >= 0 && y>= 0 && x < n && y < m; 108 } 109 110 int main() { 111 // FRead(); 112 int T; 113 Rint(T); 114 W(T) { 115 ord = 0; Cls(G); Cls(mp); 116 Rint(n); Rint(m); 117 Rep(i, n) { 118 Rs(tmp); 119 Rep(j, m) { 120 if(tmp[j] == '*') mp[i][j] = ++ord; 121 } 122 } 123 nu = nv = ord; 124 Rep(i, n) { 125 Rep(j, m) { 126 if(mp[i][j]) { 127 Rep(k, 4) { 128 int x = i + dx[k]; 129 int y = j + dy[k]; 130 if(ok(x, y) && mp[x][y]) { 131 G[mp[i][j]][mp[x][y]] = 1; 132 } 133 } 134 } 135 } 136 } 137 printf("%d\n", nu - hungary() / 2); 138 } 139 RT 0; 140 }
转载于:https://www.cnblogs.com/kirai/p/5808414.html
[POJ3020]Antenna Placement(二分图最大匹配,最小边覆盖)相关推荐
- NC107617 poj3020 Antenna Placement
问题: n * m的矩阵,有一些障碍点,用12的骨牌覆盖所有非障碍点 (12骨牌可重叠,骨牌可越界,骨牌可延伸到障碍点) 问最少需要 多少个. 题解: • 尽量用一个骨牌覆盖两个格子,覆盖不了了再重叠 ...
- 解题报告 (九) 二分图最大匹配
文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...
- 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)
题干: The Global Aerial Research Centre has been allotted the task of building the fifth generation of ...
- 图论总结(一)二分图最大匹配
二分图最大匹配 (一).二分图 1.定义 2.性质 3.判定 (二).二分图的匹配 1.二分图的最大匹配 2. König定理及其证明 3.最小边覆盖与最大独立集 (三).增广路径 1.定义 2.性质 ...
- 二分图最大匹配的应用
欢迎大家访问博客:博客传送门 参考 夜深人静学算法 大佬 二分图最大匹配的应用 对于二分图最大匹配来说,更重要的是对一些实质问题的转化,比如通过求解二分图最大匹配,我们可以得到一个二分图的最小顶点覆盖 ...
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...
- POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...
- HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一棵树,现在要在节点上放置士兵,每个士兵可以监视与其所在的节点直接相连的节点,问最少需要多少个士兵才能将整棵树都监视到 题目分析:求最少的节点,以保证每条边都有一个端 ...
- HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:给出一个有向图,现在需要在不同的地方空降伞兵,保证所有伞兵沿着道路可以走完所有城市,求出最少伞兵的数量 题目分析:我们的目的是要用最少的路径覆盖所有顶点,换句话说就是二分 ...
- HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)
题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...
最新文章
- linux postgresql .run包卸载,linux下删除自带的postgresql 及全新安装
- 资料备用:LUA性能剖析工具
- CF1354F. Summoning Minions
- java安卓浏览器下载文件,JAVA实现文件下载,浏览器端得到数据没反应解决方案
- MySQL中实现并、交、差
- 如何修改DynEd的学生记录服务器,DynEd教师管理端操作文档..docx
- 全国哀悼日,英来网停站一天。
- 怀念父亲母亲-端午节快乐
- icon、png网页开发中所需要的小图标
- 生产计划:制定您的生产流程
- qq2013 beta4(6734)木头显ip v10.4.2
- python随机森林变量重要性_推荐 :一文读懂随机森林的解释和实现(附python代码)...
- Maven 加入高德地图,类推百度地图
- 手机通讯录(纯java)
- 行业的英语术语大全之国际贸易
- graph使泳道图的label横向显示
- 火狐浏览器打开GitHUb时,说“建立安全连接失败”,解决方案
- 中国没有一个所谓“全民的互联网”(转)
- 安全HCIP之IPX
- 计算机毕业设计springboot网上体育用品商城系统