题目链接: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(二分图最大匹配,最小边覆盖)相关推荐

  1. NC107617 poj3020 Antenna Placement

    问题: n * m的矩阵,有一些障碍点,用12的骨牌覆盖所有非障碍点 (12骨牌可重叠,骨牌可越界,骨牌可延伸到障碍点) 问最少需要 多少个. 题解: • 尽量用一个骨牌覆盖两个格子,覆盖不了了再重叠 ...

  2. 解题报告 (九) 二分图最大匹配

    文章目录 二分图最大匹配 解题报告 一.最大匹配模板题 HDU 1083 Courses HDU 2063 过山车 HDU 1528 Card Game Cheater HDU 1179 Olliva ...

  3. 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)

    题干: The Global Aerial Research Centre has been allotted the task of building the fifth generation of ...

  4. 图论总结(一)二分图最大匹配

    二分图最大匹配 (一).二分图 1.定义 2.性质 3.判定 (二).二分图的匹配 1.二分图的最大匹配 2. König定理及其证明 3.最小边覆盖与最大独立集 (三).增广路径 1.定义 2.性质 ...

  5. 二分图最大匹配的应用

    欢迎大家访问博客:博客传送门 参考 夜深人静学算法 大佬 二分图最大匹配的应用 对于二分图最大匹配来说,更重要的是对一些实质问题的转化,比如通过求解二分图最大匹配,我们可以得到一个二分图的最小顶点覆盖 ...

  6. 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement

    题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...

  7. POJ - 2226 Muddy Fields(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个n*m的地图,地图中'*'代表泥地,'.'代表空地,现在我们有两种木板,一种可以覆盖一行中的任意长度,我们成为行木板,另一种可以覆盖一列中的任意长度,我们成为列木 ...

  8. HDU - 1054 Strategic Game(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一棵树,现在要在节点上放置士兵,每个士兵可以监视与其所在的节点直接相连的节点,问最少需要多少个士兵才能将整棵树都监视到 题目分析:求最少的节点,以保证每条边都有一个端 ...

  9. HDU - 1151 Air Raid(最小路径覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:给出一个有向图,现在需要在不同的地方空降伞兵,保证所有伞兵沿着道路可以走完所有城市,求出最少伞兵的数量 题目分析:我们的目的是要用最少的路径覆盖所有顶点,换句话说就是二分 ...

  10. HDU - 1150 Machine Schedule(最小点覆盖-二分图最大匹配)

    题目链接:点击查看 题目大意:现在有一个机器A和一个机器B,A机器有n种模式,B机器有m种模式,现在有k次工作需要完成,每次工作的信息为: id x y:编号为id,在A机器要用x模式完成,在B机器要 ...

最新文章

  1. linux postgresql .run包卸载,linux下删除自带的postgresql 及全新安装
  2. 资料备用:LUA性能剖析工具
  3. CF1354F. Summoning Minions
  4. java安卓浏览器下载文件,JAVA实现文件下载,浏览器端得到数据没反应解决方案
  5. MySQL中实现并、交、差
  6. 如何修改DynEd的学生记录服务器,DynEd教师管理端操作文档..docx
  7. 全国哀悼日,英来网停站一天。
  8. 怀念父亲母亲-端午节快乐
  9. icon、png网页开发中所需要的小图标
  10. 生产计划:制定您的生产流程
  11. qq2013 beta4(6734)木头显ip v10.4.2
  12. python随机森林变量重要性_推荐 :一文读懂随机森林的解释和实现(附python代码)...
  13. Maven 加入高德地图,类推百度地图
  14. 手机通讯录(纯java)
  15. 行业的英语术语大全之国际贸易
  16. graph使泳道图的label横向显示
  17. 火狐浏览器打开GitHUb时,说“建立安全连接失败”,解决方案
  18. 中国没有一个所谓“全民的互联网”(转)
  19. 安全HCIP之IPX
  20. 计算机毕业设计springboot网上体育用品商城系统

热门文章

  1. P1012 拼数(水题)
  2. 九个编写Dockerfiles的常见错误
  3. 转 Spring是如何管理Hibernate和Struts的(二)
  4. spring mvc 上传文件
  5. Glib实例学习(1)单链表
  6. MySQL Workbench 如何连接 Amazon EC2 上的MySQL服务器?
  7. 【YOLO家族】【论文翻译】YOLO v1 Unified, Real-Time Object Detection
  8. 5.4Irvine32库
  9. 欧几里得算法求最大公约数
  10. 【WebTerminal】gotty工具