POJ - 3020 Antenna Placement 二分图 最小路径覆盖
2015-06-10 09:29
429 查看
题目大意:有n个城市,要在这n个城市上建立无线电站,每个无线电站只能覆盖2个相邻的城市,问至少需要建多少个无线电站
解题思路:英语题目好坑,看了半天。。
这题和POJ - 2446 Chessboard类似
可以将所有城市分成两个点集,那么之间的连线就代表无线电站的覆盖关系了。
因为所有城市都要覆盖到,所以根据关系,求出最小路径覆盖就能覆盖所有城市了
解题思路:英语题目好坑,看了半天。。
这题和POJ - 2446 Chessboard类似
可以将所有城市分成两个点集,那么之间的连线就代表无线电站的覆盖关系了。
因为所有城市都要覆盖到,所以根据关系,求出最小路径覆盖就能覆盖所有城市了
[code]#include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; const int N = 1500; const int M = 50; int vis , link ,g[M][M], h, w, cnt; vector<int> city ; char str[M]; void init() { scanf("%d%d", &h, &w); cnt = 0; memset(g, 0, sizeof(g)); for(int i = 1; i <= h; i++) { scanf("%s", str); for(int j = 0; j < w; j++) if(str[j] == '*') g[i][j+1] = ++cnt; } for(int i = 1; i <= cnt; i++) city[i].clear(); for(int i = 1; i <= h; i++) for(int j = 1; j <= w; j++) if(g[i][j]){ if(i - 1 > 0 && g[i-1][j]) city[g[i][j]].push_back(g[i-1][j]); if(i + 1 <= h && g[i+1][j]) city[g[i][j]].push_back(g[i+1][j]); if(j - 1 > 0 && g[i][j-1]) city[g[i][j]].push_back(g[i][j-1]); if(j + 1 <= w && g[i][j+1]) city[g[i][j]].push_back(g[i][j+1]); } memset(link, 0, sizeof(link)); } bool dfs(int u) { for(int i = 0; i < city[u].size(); i++) { int v = city[u][i]; if(vis[v]) continue; vis[v] = 1; if(!link[v] || dfs(link[v])) { link[v] = u; return true; } } return false; } void hungary() { int ans = 0; for(int i = 1; i <= cnt; i++) { memset(vis, 0, sizeof(vis)); if(dfs(i)) ans++; } printf("%d\n", cnt - ans / 2); } int main() { int test; scanf("%d", &test); while(test--) { init(); hungary(); } return 0; }
相关文章推荐
- scala编程-函数与闭包
- Clippper模拟量输出设置
- 每日一招:最高操作境界“一买就涨”
- refresh的停车场
- C# 数据结构 之 二叉树
- PHP array_diff_assoc()
- LG Open source code获取
- 为什么使用LINUX(有点长,没耐心别看)大家自己体会
- web.xml中的Servlet的url-pattern映射规则
- R.java was modified manually! Reverting to generated version!项目显示红色感叹号
- NOJ1184 迷失的邮票 散列表
- lightoj 1422Halloween Costumes(区间dp)
- android SharedPreferences类存储路径、本地数据库路径
- nc 数据访问接口
- 用c#开发微信 (15) 微活动 1 大转盘
- 02 Linux 下安装JDK并测试开发“Hello World!”
- Javascript中实现String.startsWith和endsWith方法
- 第13周项目OOP版电子词典
- Android API文档_AudioFormat
- 大数据究竟是什么?一篇文章让你认识并读懂大数据