BFS(染色) LA 3977 Summits
题意:题意坑爹。问符合条件的的山顶个数
分析:降序排序后从每个点出发,假设为山顶,如果四周的点的高度>h - d那么可以走,如果走到已经走过的点且染色信息(山顶高度)不匹配那么就不是山顶。重点在于就算知道不是山顶也要染色完。
#include <bits/stdc++.h>
using namespace std; const int N = 5e2 + 5;
const int INF = 0x3f3f3f3f; int h, w, d;
struct Point {
int x, y, z;
Point() {}
Point(int x, int y, int z) : x (x), y (y), z (z) {}
bool operator < (const Point &r) const {
return z > r.z;
}
};
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
vector<Point> ps;
int mat[N][N];
int peak[N][N];
bool vis[N][N]; bool judge(int x, int y, int az) {
if (x < 1 || x > h || y < 1 || y > w || mat[x][y] <= az - d) return false;
else return true;
} int BFS(Point &a) {
if (vis[a.x][a.y]) return 0;
vis[a.x][a.y] = true; peak[a.x][a.y] = a.z;
int cnt = 1;
bool flag = true;
queue<Point> que; que.push (a);
while (!que.empty ()) {
Point r = que.front (); que.pop ();
for (int i=0; i<4; ++i) {
int tx = r.x + dx[i];
int ty = r.y + dy[i];
if (!judge (tx, ty, a.z)) continue;
if (vis[tx][ty]) {
if (peak[tx][ty] != a.z) {
flag = false;
}
continue;
}
vis[tx][ty] = true; peak[tx][ty] = a.z;
que.push (Point (tx, ty, mat[tx][ty]));
if (mat[tx][ty] == a.z) cnt++;
}
}
if (!flag) cnt = 0;
return cnt;
} int run(void) {
memset (vis, false, sizeof (vis));
memset (peak, 0, sizeof (peak));
int ret = 0;
for (int i=0; i<ps.size (); ++i) {
ret += BFS (ps[i]);
}
return ret;
} int main(void) {
int T; scanf ("%d", &T);
while (T--) {
scanf ("%d%d%d", &h, &w, &d);
ps.clear ();
for (int i=1; i<=h; ++i) {
for (int j=1; j<=w; ++j) {
scanf ("%d", &mat[i][j]);
ps.push_back (Point (i, j, mat[i][j]));
}
}
sort (ps.begin (), ps.end ());
printf ("%d\n", run ());
} return 0;
}
BFS(染色) LA 3977 Summits的更多相关文章
- UVALive 3977 BFS染色
这个题意搞了半天才搞明白 就是如果定义一个d-summit,即从该点到另一个更高的点,经过的路径必定是比当前点低至少d高度的,如果该点是最高点,没有比他更高的,就直接视为顶点 其实就是个BFS染色,先 ...
- HDU 2444 二分图判断 (BFS染色)+【匈牙利】
<题目链接> 题目大意: 有N个人,M组互相认识关系互相认识的两人分别为a,b,将所有人划分为两组,使同一组内任何两人互不认识,之后将两个组中互相认识的人安排在一个房间,如果出现单人的情况 ...
- 【Luogu】P1330封锁阳光大学(bfs染色)
题目链接 这题恶心死我了. bfs染色,统计每个联通块两色的个数,ans加它们的最小值. #include<cstdio> #include<cctype> #include& ...
- XMU 1617 刘备闯三国之汉中之战 【BFS+染色】
1617: 刘备闯三国之汉中之战 Time Limit: 1000 MS Memory Limit: 128 MBSubmit: 6 Solved: 5[Submit][Status][Web B ...
- UVALive - 3977 Summits (BFS染色)
题目大意:坑爹的题目.题意那么难理解. 讲的就是,假设该点是山顶的话(高度为h).那么以该点为中心,往外辐射.走高度大于h-d的点,到达不了还有一个比它高的点 这就提示了,高度要从大到小排序,依次以高 ...
- hdu4751Divide Groups(dfs枚举完全图集合或者bfs染色)
/************************************************************************* > File Name: j.cpp > ...
- Hdu 5285 wyh2000 and pupil (bfs染色判断奇环) (二分图匹配)
题目链接: BestCoder Round #48 ($) 1002 题目描述: n个小朋友要被分成两班,但是有些小朋友之间是不认得的,所以规定不能把不认识的小朋友分在一个班级里面,并且一班的人数要比 ...
- CF796D Police Stations BFS+染色
题意:给定一棵树,树上有一些点是警察局,要求所有点到最近的警察局的距离不大于 $d$,求最多能删几条边 ? 题解: 考虑什么时候一条边可以被断开:这条边的两个端点被两个不同的警察局覆盖掉. 我们要设计 ...
- CodeForces-598D(BFS,染色)
链接: https://vjudge.net/problem/CodeForces-598D 题意: Igor is in the museum and he wants to see as many ...
随机推荐
- supersr--控制器的生命周期:
调用顺序为 1 init函数(init;initWithFrame;initWithCoder;等)--初始化 2 awakeFromNib--在loadView之前的工作放在这里 3 viewDid ...
- [Android Pro] Android下toolbox简介
toolbox是Android 自带的提供shell命令的软件.有点类似于busybox,但功能上好像弱很多.其源码可以从Android source code 中system/core/toolbo ...
- August 14th, Week 34th Sunday, 2016
To live is to function, that is all there is in living. 活着就要发挥作用,这就是生活的全部内容. I often joke that my dr ...
- java annotation
import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.an ...
- codevs 1702素数判定2
Miller-Rabin算法实现,但是一直被判题程序搞,输入9999999999得到的结果分明是正确的但是一直说我错 #include <cstdio> #include <cmat ...
- HTML5 – 1.基础
新网页结构 1.<header> 定义了文档的头部区域 2.<nav>标签定义导航链接的部分. 3.<article>定义页面独立的内容区域. 4.<sect ...
- MyBatis 特殊字符处理
http://blog.csdn.net/zheng0518/article/details/10449549
- 23.备忘录模式(Memento Pattern)
using System; using System.Collections.Generic; namespace ConsoleApplication6 { /// <summary> ...
- PHP 获取图像信息 getimagesize 函数
getimagesize() 函数用于获取图像尺寸,类型等信息. imagesx() 函数用于获取图像的宽度. imagesy() 函数用于获取图像的高度. getimagesize() getima ...
- 【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)
前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现a ...