rt

若地图中一个元素所邻接的所有元素都比这个元素高度要小(或它邻接的是地图的边界),则该元素和其周围所有按照这样顺序排列的元素的集合称为一个小山丘。

那么我们可以用一个结构体类型记录所有非零高度的横纵坐标以及相应的高度值

然后对高度进行排序 对每一次高度进行$dfs$ 及时删除所有的联通高度的小山丘

很显然 如果从一个给定高度的山丘的最高高度进行$dfs$ 一定可以将该山丘的所有高度清零

犯了一个很zz的错误

在递归调用的时候 $tmp$定义的全局变量 然后在递归调用的时候 在下一次递归结束

之后 tmp的值已经被改变了 而当前层的tmp还未判断完成

我发誓我以后在$dfs$里面只用局部变量 手动再见

代码如下:

#include<bits/stdc++.h>
using namespace std;
int a[705][705],ans,px,py,tot,m,n;
int dx[]={0,0,1,1,1,-1,-1,-1};
int dy[]={1,-1,0,1,-1,0,1,-1};
struct p{int x,y,num;
}f[490005];
void dfs(int x,int y){int tmp=a[x][y];//在删除之前保存数据 //!!!每次循环都要调用tmp 在下一次递归结束之后 tmp的值已经被改变了 而当前层的tmp还未判断完成 a[x][y]=0;for (int i=0;i<=7;i++){px=x+dx[i];py=y+dy[i];if (px>0&&px<=n&&py>0&&py<=m&&tmp>=a[px][py]&&a[px][py]!=0) dfs(px,py);}
}
bool cmp(p a,p b){return a.num>b.num;
}
int main(){scanf("%d%d",&n,&m);for (int i=1;i<=n;i++)for (int j=1;j<=m;j++){scanf("%d",&a[i][j]);if (a[i][j]) {tot++;f[tot].x=i;f[tot].y=j;f[tot].num=a[i][j];} }sort(f+1,f+tot+1,cmp);for (int i=1;i<=tot;i++)if (a[f[i].x][f[i].y]) {//如果在删除过程当中没有被删除 ans++;dfs(f[i].x,f[i].y);} printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Hiraeth-dh/p/10819929.html

题解 P2919 【[USACO08NOV]守护农场Guarding the Farm】相关推荐

  1. 【luogu P2919 [USACO08NOV]守护农场Guarding the Farm】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2919 1.搜索的时候分清楚全局变量和局部变量的区别 2.排序优化搜索 #include <cstdio ...

  2. 洛谷 P2919 [USACO08NOV]守护农场Guarding the Farm

    题目描述 The farm has many hills upon which Farmer John would like to place guards to ensure the safety ...

  3. 守护农场Guarding the Farm

    题意翻译 农夫John的农场里有很多小山丘,他想要在那里布置一些保镖去保卫他的那些相当值钱的奶牛们. 他想知道如果在一座小山丘上布置一名保镖的话,他最少总共需要招聘多少名保镖.他现在手头有一个用数字矩 ...

  4. bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场(DFS)

    1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 913  Solv ...

  5. 一道并查集的(坑)题:关闭农场closing the farm

    题目描述 in English: Farmer John and his cows are planning to leave town for a long vacation, and so FJ ...

  6. BZOJ 1619 [Usaco2008 Nov]Guarding the Farm 保卫牧场:dfs【灌水】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1619 题意: 给你一个n*m的地形图,位置(x,y)的海拔为h[x][y]. 一个山顶的定 ...

  7. 洛谷 P2916题解 【[USACO08NOV]Cheering up the Cow G】

    所需前置知识:邴茶吉 我个人觉得把所有东西写成函数会更方便 大多数简单的生成树都要写这些东西: 建结构体-->给结构体写比较函数 一模一样的并查集模板 重点的kruskal分为以下几步: 1.循 ...

  8. P2920题解【[USACO08NOV]时间管理Time Management】

    这个题不难,但我是蒟蒻... 先看题目 题目: Ever the maturing businessman, Farmer John realizes that he must manage his ...

  9. 【题解】P2921 在农场万圣节(tarjan)

    这个题可以用tarjan解决,将染色后的点标记为tarjan的那个点,特判如果出发点等于目标点 答案就是1,如果要求的那个点在强连通分量里面,我们就输出其所含的cnt(也就是强连通分量所代表的环的大小 ...

  10. 什么是云渲染?【谈谈云渲染和传统渲染农场的区别】

    什么是云渲染?云渲染什么意思?云渲染和传统渲染农场的区别是什么?很多小伙伴有这样的疑问,今天,Renderbus瑞云渲染和大家谈一谈其中的含义. 云渲染是什么? 一.什么是云渲染,云渲染什么意思? 首 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之工厂方法模式(五):工厂方法模式扩展
  2. 经验总结 | 重构让你的代码更优美和简洁
  3. 特斯拉:即将推出神经网络雨刷
  4. strrchr 字符查找函数
  5. H5脱离微信通过调起微信客户端支付
  6. php图片存储内容读取,php读取和保存base64编码的图片内容
  7. FFMPEG 常用命令行
  8. 2009程序员考试大纲
  9. Think-Cell Chart 咨询级图表制作-秦川-专题视频课程
  10. Delphi 制作股票分时图
  11. OSG加载倾斜摄影数据
  12. 基于JAVA实现的图形化页面置换算法
  13. 天肌处理器天梯排行榜2022 2022天玑处理器天梯图
  14. 盖茨自说不善招聘、管理:善于“借力”
  15. 微信小程序合集源码I(机器人聊天+仿别踩白块儿小游戏+仿步步高电子词典+仿知乎+日记+汉字拼音+转盘抽奖)
  16. 关于chrome、edge浏览器f12开发者模式的application中无法添加参数的问题
  17. 光模块COB工艺之耦合激光焊
  18. IPv6连接测试通过,但是无法ping成功问题解决(记录)
  19. 玩转Luat 进阶篇②——远程升级功能原理详解
  20. matlab求两向量夹角_MATLAB教程-台大郭彦甫-第十二节,含练习答案

热门文章

  1. vue 加headers_(vue.js)axios interceptors 拦截器中添加headers 属性
  2. 神经系统图 基本结构图,神经系统结构图示意图
  3. 计算机领域经典书籍推荐
  4. php 根据时间算年龄,PHP根据出生日期计算年龄的方法
  5. 【每天学点管理学】目标管理工具——SMART法则
  6. 计算机bios所以的英文翻译,bios界面翻译对照 主板BIOS界面全英文翻译介绍
  7. 墨菲定律: If anything can go wrong,it will.
  8. plc中int数据类型范围_AB的PLC中,这些数据类型:INT、DINT、SINT、REAL和BOOL,分别代表什么意思?...
  9. SAP 上线 新旧科目映射 辅助核算
  10. redmine使用指南_Redmine安装与入门指南