BZOJ 1619 USACO 2008 Nov Guarding the Farm 保卫牧场
来源:互联网 发布:软件培训班 编辑:程序博客网 时间:2024/05/16 07:33
每次都从最高点开始流即可。话说这个dfs是不是floodfill?
跪了,第一页咋这么快。
#include <cstdio>#include <algorithm>using namespace std;const int N = 700;int read() { int s = 0, f = 1; char ch = getchar(); for (; ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') f = -1; for (; '0' <= ch && ch <= '9'; ch = getchar()) s = s * 10 + ch - '0'; return s * f;}#define rep(i,j,k) for(int i=j;i<k;i++)const int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};const int dy[] = {-1, 0, 1, -1, 1, -1, 0, 1};struct Node { int x, y, h; } d[N * N];bool cmp(const Node &a, const Node &b) { return a.h > b.h; }int h[N][N], n, m, cnt = 0, ans;bool f[N][N];void dfs(int x, int y) { f[x][y] = 1; rep(i,0,8) { int nx = x + dx[i], ny = y + dy[i]; if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue; if (h[nx][ny] <= h[x][y] && !f[nx][ny]) dfs(nx, ny); }}int main() { n = read(); m = read(); rep(i,0,n) rep(j,0,m) d[cnt++] = (Node) { i, j, h[i][j] = read() }; sort(d, d + cnt, cmp); rep(i,0,cnt) if (!f[d[i].x][d[i].y]) dfs(d[i].x, d[i].y), ans++; printf("%d", ans); return 0;}
1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 635 Solved: 283
[Submit][Status][Discuss]
Description
The farm has many hills upon which Farmer John would like to place guards to ensure the safety of his valuable milk-cows. He wonders how many guards he will need if he wishes to put one on top of each hill. He has a map supplied as a matrix of integers; the matrix has N (1 < N <= 700) rows and M (1 < M <= 700) columns. Each member of the matrix is an altitude H_ij (0 <= H_ij <= 10,000). Help him determine the number of hilltops on the map. A hilltop is one or more adjacent matrix elements of the same value surrounded exclusively by either the edge of the map or elements with a lower (smaller) altitude. Two different elements are adjacent if the magnitude of difference in their X coordinates is no greater than 1 and the magnitude of differences in their Y coordinates is also no greater than 1.
农夫JOHN的农夫上有很多小山丘,他想要在那里布置一些保镖(……)去保卫他的那些相当值钱的奶牛们。 他想知道如果在一座小山丘上布置一名保镖的话,他总共需要招聘多少名保镖。他现在手头有一个用数字矩阵来表示地形的地图。这个矩阵有N行(1 < N < = 100)和M列( 1 < M < = 70) 。矩阵中的每个元素都有一个值H_ij(0 < = H_ij < =10,000)来表示该地区的海拔高度。请你帮助他统计出地图上到底有多少个小山丘。 小山丘的定义是:若地图中一个元素所邻接的所有元素都比这个元素高度要小(或它邻接的是地图的边界),则该元素和其周围所有按照这样顺序排列的元素的集合称为一个小山丘。这里邻接的意义是:若一个元素与另一个横坐标纵坐标和它的横纵坐标相差不超过1,则称这两个元素邻接。 问题名称:guard 输入格式: 第一行:两个由空格隔开的整数N和M 第二行到第N+1行:第I+1行描述了地图上的第I行,有M个由空格隔开的整数:H_ij. 输入样例:(guard.in): 8 7 4 3 2 2 1 0 1 3 3 3 2 1 0 1 2 2 2 2 1 0 0 2 1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 1 1 1 0 0 1 2 2 1 1 0 0 1 1 1 2 1 0 输出格式: 第一行:小山丘的个数 输出样例:(guard.out): 3 输出样例解释: 地图上有三个小山丘:每个小山丘的山峰位置分别在左上角(高度为4),右上角(高度为1)和底部(高度为2)。
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 describes row i of the matrix with M space-separated integers: H_ij
Output
* Line 1: A single integer that specifies the number of hilltops
Sample Input
4 3 2 2 1 0 1
3 3 3 2 1 0 1
2 2 2 2 1 0 0
2 1 1 1 1 0 0
1 1 0 0 0 1 0
0 0 0 1 1 1 0
0 1 2 2 1 1 0
0 1 1 1 2 1 0
Sample Output
HINT
- BZOJ 1619 USACO 2008 Nov Guarding the Farm 保卫牧场
- BZOJ 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
- Bzoj 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场
- DFS-BZOJ-1619-[Usaco2008 Nov]Guarding the Farm 保卫牧场
- |BZOJ 1619|搜索|[Usaco2008 Nov]Guarding the Farm 保卫牧场
- 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场
- 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场 搜索
- bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场(DFS)
- bzoj1619[Usaco2008 Nov]Guarding the Farm 保卫牧场
- bzoj1619【Usaco2008 Nov】Guarding the Farm 保卫牧场
- Guarding the Farm
- 【bzoj1619】【Usaco2008 Nov】Guarding the Farm (阅读理解+bfs)题解&代码
- EOJ 2521 Guarding the Farm
- Cheering up the Cows,2008nov,usaco
- BZOJ 1605 [Usaco2008 Open]Crisis on the Farm 牧场危机 DP
- 麻烦的DP-BZOJ-1605-[Usaco2008 Open]Crisis on the Farm 牧场危机
- bzoj 1605: [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)
- 【BZOJ 1232】 【Usaco 2008 Nov】安慰奶牛cheer
- 蓝桥杯 BASIC-12 十六进制转八进制
- zookeeper使用和原理探究
- 搭建github 博客
- hadoop2.7.2安装
- Oracle学习第二天
- BZOJ 1619 USACO 2008 Nov Guarding the Farm 保卫牧场
- Android 混淆代码总结
- poj3692
- HDU 1166 敌兵布阵(splay区间求和模板)
- 2.4 Android SDK在线更新镜像服务器,Androidsdk 在线更新
- 【JAVA】3、常用代码注释
- Android开发笔记(五十八)铃声与震动
- 积跬步至千里系列之七--应用程序的安装与卸载(二)
- 黑马程序员-----java基础01第一个应用程序 "HelloWorld"