Antenna Placement(二分图的最大匹配)
http://poj.org/problem?id=3020
题意:
一个矩形中,有N个城市'*',现在这n个城市都要覆盖无线,若放置一个基站,它至多可以覆盖相邻的两个城市。
问至少放置多少个基站才能使得所有的城市都覆盖无线?
无向二分图的最小路径覆盖 = 顶点数 – 最大二分匹配数/2
1 #include <stdio.h> 2 #include <string.h> 3 const int N=505; 4 int pos[N][N],map[N][N]; 5 int link[N]; 6 bool vis[N]; 7 int dir[4][2] = {{0,-1},{0,1},{1,0},{-1,0}}; 8 int n; 9 int dfs(int x) 10 { 11 for (int i = 1; i <= n; i++) 12 { 13 if (map[x][i]&&!vis[i]) 14 { 15 vis[i] = true; 16 if(!link[i]||dfs(link[i])) 17 { 18 link[i] = x; 19 return 1; 20 } 21 } 22 } 23 return 0; 24 } 25 int main() 26 { 27 char ch; 28 int t,h,w; 29 scanf("%d",&t); 30 while(t--) 31 { 32 int id = 0; 33 int ans = 0; 34 scanf("%d%d%*c",&h,&w); 35 memset(pos,0,sizeof(pos)); 36 memset(map,0,sizeof(map)); 37 memset(link,0,sizeof(link)); 38 for(int i = 1; i <= h; i++) 39 { 40 for (int j = 1; j <= w; j++) 41 { 42 scanf("%c",&ch); 43 if (ch=='*') 44 pos[i][j] = ++id; 45 } 46 getchar(); 47 } 48 for (int i = 1; i <= h; i++) 49 { 50 for (int j = 1; j <= w; j++) 51 { 52 if(pos[i][j]) 53 for (int k = 0; k < 4; k++) 54 { 55 int dx = i+dir[k][0]; 56 int dy = j+dir[k][1]; 57 if(pos[dx][dy]) 58 { 59 map[pos[i][j]][pos[dx][dy]] = 1; 60 } 61 } 62 } 63 } 64 n = id; 65 for (int i = 1; i <= n; i++) 66 { 67 memset(vis,0,sizeof(vis)); 68 if(dfs(i)) 69 ans++; 70 } 71 printf("%d\n",n-ans/2);//无向二分图的最小路径覆盖 = 顶点数 – 最大二分匹配数/2 72 } 73 return 0; 74 }
View Code
转载于:https://www.cnblogs.com/lahblogs/p/3544930.html
Antenna Placement(二分图的最大匹配)相关推荐
- 二分图最大匹配(匈牙利算法) POJ 3020 Antenna Placement
题目传送门 1 /* 2 题意:*的点占据后能顺带占据四个方向的一个*,问最少要占据多少个 3 匈牙利算法:按坐标奇偶性把*分为两个集合,那么除了匹配的其中一方是顺带占据外,其他都要占据 4 */ 5 ...
- 用匈牙利算法求二分图的最大匹配
转载大神的!! 什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到.二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识):第二种就是我现在要讲的匈牙利算 ...
- CF 277.5 B.BerSU Ball 二分图的最大匹配 模版题
题意:求二分图的最大匹配数量 模版如下: //二分图匹配(匈牙利算法的DFS实现) //初始化:g[][]两边顶点的划分情况 //建立g[i][j]表示i->j的有向边就可以了,是左边向右边的匹 ...
- 二分图的最大匹配 匈牙利算法
基本概念 1.二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别 ...
- DAG的最小路径覆盖和二分图的最大匹配
DAG的最小路径覆盖和二分图的最大匹配 DAG的最小路径覆盖是指找最小数目的互相不相交的有向路径,满足DAG的所有顶点都被覆盖. 首先给出公式:DAG的最小路径覆盖数=DAG图中的节点数-相应二分图中 ...
- POJ 2584 T-Shirt Gumbo (二分图多重最大匹配)
题意 现在要将5种型号的衣服分发给n个参赛者,然后给出每个参赛者所需要的衣服的尺码的大小范围,在该尺码范围内的衣服该选手可以接受,再给出这5种型号衣服各自的数量,问是否存在一种分配方案使得每个选手都能 ...
- 二分图的最大匹配-解决匹配问题
题目描述 题目描述 若两个正整数的和为素数,则这两个正整数称之为"素数伴侣",如2和5.6和13,它们能应用于通信加密.现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数 ...
- 【网络流】基础二分图的最大匹配问题
标题已经说了,所以有基础的牛们就别想在这篇博客里看到什么有价值的东西.这里的解法是最基础的. 二分图是一种可以把图中的点分为两个不同的集合,且同一集合中不存在任意两个有边联通的点(就算是单向边也不行) ...
- Jamie's Contact Groups ——(一对多)二分图多重最大匹配
题目链接:http://poj.org/problem?id=2289 Jamie is a very popular girl and has quite a lot of friends, so ...
- 861. 二分图的最大匹配
861. 二分图的最大匹配 给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边. 数据保证任意一条边的两个端点都不可能在同一 ...
最新文章
- Android网络课程笔记-----定制通知系统
- VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)
- django oracle clob,记一次clob字段损坏导致的01555错误
- echarts异步加载柱状图遇到的错误- Error: Component series. not exists. Load it first.
- 「雕爷学编程」Arduino动手做(33)——ESP-01S无线WIFI模块
- day5 Java中的方法与重载
- 洛谷 P2764(最小路径覆盖=节点数-最大匹配)
- C# 连接 Exchange 发送邮件
- dell 7040m 黑苹果_618晒单如何打造一台万元级10代酷睿黑苹果
- 人工智能导论(专家系统)
- 如何破解无线网密码进行上网
- 【每天一个 Linux 命令】ssh 命令
- 混合移动应用中地图导航功能开发与应用
- USB3.2超高速协议规范
- Unity 第三方SDK框架接入 (Android Studio)
- 《VALORANT》: 双塔迷城的诞生
- 我打不了字计算机应用怎么办,键盘正常为什么打不了字 电脑键盘失灵怎么解决...
- 数字电子技术 实验一
- 前端自动化测试之chai.js断言库
- XSL语言(XSL Languages)(1)XSL Languages