洛谷P2658 汽车拉力比赛
题目描述
博艾市将要举行一场汽车拉力比赛。
赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N≤500),每个单元格的海拔范围在0到10^9之间。
其中一些单元格被定义为路标。组织者希望给整个路线指定一个难度系数D,这样参赛选手从任一路标到达别的路标所经过的路径上相邻单元格的海拔高度差不会大于D。也就是说这个难度系数D指的是保证所有路标相互可达的最小值。任一单元格和其东西南北四个方向上的单元格都是相邻的。
输入输出格式
输入格式:
第一行两个整数M和N。第2行到第M+1行,每行N个整数描述海拔高度。第2+M行到第1+2M
行,每行N个整数,每个数非0即1,1表示该单元格是一个路标。
输出格式:
一个整数,即赛道的难度系数D。
输入输出样例
输入样例
3 5
20 21 18 99 5
19 22 20 16 26
18 17 40 60 80
1 0 0 0 1
0 0 0 0 0
0 0 0 0 1
输出样例
21
一年前的比赛题qwq,答案单调性显然,然而当时打了个bfs建图+spfa过了,现在交上去神tmT一个点,于是撸了个二分+bfs。
代码如下
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const int sz = 501 * 501;
int map[501][501];
bool is[501][501];
int step[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
bool use[501][501];
struct point
{int x,y;
}start_point[sz];
int len;
queue < point > q;
int m,n;
void init()
{memset(use,0,sizeof(use));
}
void start_work()
{scanf("%d%d",&m,&n);for(int i = 1 ; i <= m ; i ++)for(int j = 1 ; j <= n ; j ++)scanf("%d",&map[i][j]);for(int i = 1 ; i <= m ; i ++)for(int j = 1 ; j <= n ; j ++){scanf("%d",&is[i][j]);if(is[i][j])start_point[++len].x = i , start_point[len].y = j;}
}
void bfs(point s,ll k)
{use[s.x][s.y] = 1;q.push(s);while(!q.empty()){point f = q.front();q.pop();for(int i = 0 ; i < 4 ; i ++){int nx = f.x + step[i][0];int ny = f.y + step[i][1];if(nx >= 1 && nx <= m && ny >= 1 && ny <= n && !use[nx][ny] && abs(map[f.x][f.y] - map[nx][ny]) <= k){use[nx][ny] = 1;point nxt;nxt.x = nx;nxt.y = ny;q.push(nxt);}}}
}
bool check(ll mid)
{init();bfs(start_point[1],mid);for(int i = 1 ; i <= len ; i ++)if(!use[start_point[i].x][start_point[i].y])return false;return true;
}
ll work_ef()
{ll l = 0 , r = 214748364711ll;while(r - l > 1){ll mid = (l + r) / 2;if(check(mid))r = mid;elsel = mid;}if(check(l))return l;return r;
}
int main()
{start_work();printf("%lld\n",work_ef());return 0;
}
洛谷P2658 汽车拉力比赛相关推荐
- 洛谷——P2658 汽车拉力比赛
P2658 汽车拉力比赛 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ≤500),每个单元格的海拔范围在0到10^9之间. 其中一些 ...
- 洛谷—— P2658 汽车拉力比赛
https://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ...
- 洛谷2658 汽车拉力比赛
洛谷2658 汽车拉力比赛 本题地址: http://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M* ...
- 洛谷2658 汽车拉力比赛 二分
题目链接: https://www.luogu.org/problem/show?pid=2658 题意: 题解: 二分D,BFS判断是否可以到达全部路标. 很有道理啊,为什么T啊! 代码: 1 #i ...
- P2658 汽车拉力比赛 - 普及+/提高-二分+搜索
P2658 汽车拉力比赛 思路:刚开始我就写了一个把路标的四个方向最小的值 的 最大值输出来,答案就能得到90分哈哈哈,但这是不正确的做法 还是AC不了! 自己也是没做出来 . 这个题用到了搜索+二分 ...
- P2658 汽车拉力比赛
题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ M,N ≤500),每个单元格的海拔范围在0到10^9之间. 其中一些单元格被定义为路标.组织者 ...
- [P2658]汽车拉力比赛
原题链接 二分 #include<iostream> #include<cstring> #include<algorithm> #include<cstdi ...
- 洛谷月赛:最后的狂欢 汽车拉力比赛
本题地址: http://www.luogu.org/problem/show?pid=2658 题目描述 博艾市将要举行一场汽车拉力比赛. 赛场凹凸不平,所以被描述为M*N的网格来表示海拔高度(1≤ ...
- scau 8616 汽车拉力比赛
上次我们过了二分图的最佳匹配,现在我们看一道题目,经典的二分图的最佳匹配题目 8616 汽车拉力比赛 时间限制:500MS 内存限制:1000K 提交次数:71 通过次数:24 题型: ...
最新文章
- ThinkPHP5表单令牌+表单数据验证验证规则
- linux按函数数字大小排序,linux awk 数组排序多种实现方法
- 【重复制造精讲】报告点(Reporting Point)简介
- 12.当效率至关重要时,请在map::operator[]与map::insert之间谨慎作出选择
- 2017中国开源年会(COSCon'17) 报名正式开启
- spring框架三层架构_Spring框架架构
- LeetCode 97. 交错字符串(DP)
- java用什么编辑器比较好_强大又好用的一款微信排版工具:135编辑器
- fileservice 类代码放哪里_一步步开发Windows服务(Windows Service)[转]
- java ef 引用问题_EF Core - 自引用实体
- 谁“杀死”了杀毒软件
- 高仿项目协作工具【Worktile】,从零带你一步步实现组织架构、网盘、消息、项目、审批等功能
- 三面网易,四面阿里,五年开发经验程序员剑指大厂,java语言程序设计与数据结构进阶篇答案
- 推荐系列:易文档,让接口文档更加给力
- php把数据存到cookie,php – 在cookie中存储数组
- php lanyu idea,IDEA使用
- 控制算法简析1——PID和负反馈的数学原理
- 浅析人工智能体系建设
- mysql dsn设置_[分享]用数据源(用数据源(ODBC)创建数据库连接DSN设置)创建数据库连接DSN设置...
- 7个跑步易犯的错误和解决办法
热门文章
- 小学信息科技编程题C语言,小学信息技术试题.doc
- 用nginx搭建symbol proxy
- call of overloaded 'xxx' is ambiguous
- TypeError: Cannot read properties of undefined (reading ‘MethodInfo‘)
- 注册热键——RegisterHotKey
- 在DigiX数字生活节,寻找关于未来生活的三个剪影
- 模态对话框和非模态对话框
- 适合中小企业的知识库软件有哪些?
- 命令查询oracle端口,windows下查看端口的方法[图文]
- ORA-00918: column ambiguously defined解决之道