UVA 12130 - Summits(BFS+贪心)
UVA 12130 - Summits
题意:给定一个h * w的图,每一个位置有一个值。如今要求出这个图上的峰顶有多少个。峰顶是这样定义的。有一个d值,假设一个位置是峰顶。那么它不能走到不大于该峰顶高度 - d的位置。假设满足这个条件下。而且无法走到更高的山峰,那么它就是峰顶
思路:利用贪心的策略。把全部点丢到优先队列,每次取出最高的峰值開始找,进行广搜。搜的过程中记录下最大值的点的个数。假设这个是峰顶。就加上这个数。
推断是不是峰顶的方法为,假设广搜过程中。不会找到一个点的能到的最高峰值大于它,那么它就是峰顶,能够在广搜过程边广搜边记录下每一个点能到的最大高度,然后这样一来,事实上每一个点都仅仅会搜到一次,复杂度为O(h
w log(h * w))
代码:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std; const int N = 505;
const int D[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; int t, h, w, d, g[N][N], vis[N][N]; struct Point {
int x, y, val;
Point(int x, int y, int val = 0) {
this->x = x;
this->y = y;
this->val = val;
}
bool operator < (const Point& a) const {
return val < a.val;
}
}; priority_queue<Point> Q; int bfs(int x, int y, int H) {
queue<Point> Q;
Q.push(Point(x, y));
vis[x][y] = H;
int ans = 1;
int flag = 1;
while (!Q.empty()) {
Point u = Q.front();
Q.pop();
for (int i = 0; i < 4; i++) {
int xx = u.x + D[i][0];
int yy = u.y + D[i][1];
if (xx < 0 || xx >= h || yy < 0 || yy >= w) continue;
if (H - g[xx][yy] >= d) continue;
if (vis[xx][yy] > H) {
flag = 0;
continue;
}
if (vis[xx][yy] == H) continue;
if (g[xx][yy] == H) ans++;
vis[xx][yy] = H;
Q.push(Point(xx, yy));
}
}
if (flag) return ans;
return 0;
} int solve() {
memset(vis, -1, sizeof(vis));
int ans = 0;
while (!Q.empty()) {
Point u = Q.top();
Q.pop();
if (vis[u.x][u.y] != -1) continue;
ans += bfs(u.x, u.y, g[u.x][u.y]);
}
return ans;
} int main() {
scanf("%d", &t);
while (t--) {
scanf("%d%d%d", &h, &w, &d);
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
scanf("%d", &g[i][j]);
Q.push(Point(i, j, g[i][j]));
}
}
printf("%d\n", solve());
}
return 0;
}
UVA 12130 - Summits(BFS+贪心)的更多相关文章
- UVA12130 Summits(BFS + 贪心)
UVA12130 Summits(BFS + 贪心) 题目链接 题目大意: 给你一个h ∗ w 的矩阵,矩阵的每一个元素都有一个值,代表这个位置的高度. 题目要求你找出这个图中有多少个位置是峰值点.从 ...
- UVA - 12130 Summits
Description Problem G - Summits Time limit: 8 seconds You recently started working for the largest m ...
- BFS+贪心 HDOJ 5335 Walk Out
题目传送门 /* 题意:求从(1, 1)走到(n, m)的二进制路径值最小 BFS+贪心:按照标程的作法,首先BFS搜索所有相邻0的位置,直到1出现.接下去从最靠近终点的1开始, 每一次走一步,不走回 ...
- HDU-1072 Nightmare (bfs+贪心)
Nightmare Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Sub ...
- uva 1615 高速公路(贪心,区间问题)
uva 1615 高速公路(贪心,区间问题) 给定平面上n个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D.(n<=1e5) 对于每个 ...
- UVA 10714 Ants 蚂蚁 贪心+模拟 水题
题意:蚂蚁在木棍上爬,速度1cm/s,给出木棍长度和每只蚂蚁的位置,问蚂蚁全部下木棍的最长时间和最短时间. 模拟一下,发现其实灰常水的贪心... 不能直接求最大和最小的= =.只要求出每只蚂蚁都走长路 ...
- UVa 11729 - Commando War(贪心)
"Waiting for orders we held in the wood, word from the front never came By evening the sound of ...
- UVA 10718 Bit Mask 贪心+位运算
题意:给出一个数N,下限L上限U,在[L,U]里面找一个整数,使得N|M最大,且让M最小. 很明显用贪心,用位运算搞了半天,样例过了后还是WA,没考虑清楚... 然后网上翻到了一个人家位运算一句话解决 ...
- UVA 11039-Building designing【贪心+绝对值排序】
UVA11039-Building designing Time limit: 3.000 seconds An architect wants to design a very high build ...
随机推荐
- Nginx报504 gateway timeout错误的解决方法
转载文章来源:http://www.111cn.net/sys/nginx/90669.htm(若侵删) Nginx报504 gateway timeout错误引起,一个是文件配置问题,另一个是相关处 ...
- 如果dom节点是动态添加进页面的,在页面节点绑定事件如何解决的问题。
如果dom节点是动态添加进页面,想在节点绑定事件,传统的做法就是遍历节点,但会出现问题,也肯能有其他的办法,突然想到 可以依据事件冒泡,这样就不惧页面后添加节点而不响应事件的问题.比较结实.示例代码如 ...
- 【Visual Studio】让用VS2012/VS2013编写的程序在XP中顺利运行(转)
原文转自 http://blog.csdn.net/asanscape/article/details/38752655 微软为了推销自家平台,默认配置下VS2012和VS2013编写的应用程序只能在 ...
- LeetCode OJ--Add Two Numbers
http://oj.leetcode.com/problems/add-two-numbers/ 将用链表表示的两个数相加,(2 -> 4 -> 3) + (5 -> 6 -> ...
- Python Challenge 第六关
第六关只有一张图和一个 PayPal 的链接,右键源代码注释中写着 PayPal 是作者要赞助的,跟题目没关系,其他的提示只有注释中写的个 zip.试过下图片,改图片扩展名等等都失败了,最后乱试改了下 ...
- AC日记——丢瓶盖 洛谷 P1316
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出 ...
- 中国正式发放5G牌照 详细对比中美两国5G实力
今天,中国5G商用走进新里程:工信部向中国电信.中国移动.中国联通.中国广电发放5G商用牌照,中国也成为继韩国.美国.瑞士.英国后,第五个正式商用5G的国家. 按照之前的规划,中国原定于2020年开启 ...
- Java开发笔记(一百零二)信号量的请求与释放
前面介绍了同步与加锁两种并发处理机制,虽然加锁比起同步要灵活一些,但是加锁在某些高级场合依然力有未逮,包括但不限于下列几点:1.某块代码被加锁之后,对其它线程而言就处于繁忙状态,缺乏弹性的阈值范围:2 ...
- Spring IOC知识java反射
[1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...
- UNIX&Linux发展图谱
来自为知笔记(Wiz)