前言
今天zty带来的是P2658 汽车拉力比赛,大家给个赞呗, zty开学了,更新是会变少的,这个学期是zty的毕业学期了,过完这学期zty就毕业了
先 赞 后 看 养 成 习 惯
先 赞 后 看 养 成 习 惯
演示用编译器及其标准
Dev C++ 6.7.5 Red panda C++14
正文
P2658 汽车拉力比赛
题目描述
博艾市将要举行一场汽车拉力比赛。
赛场凹凸不平,所以被描述为 N∗MN*MN∗M 的网格来表示海拔高度 (1≤M,N≤500)(1 \leq M,N \leq 500)(1≤M,N≤500),每个单元格的海拔范围在 000 到 10910^9109 之间。
其中一些单元格被定义为路标。组织者希望给整个路线指定一个难度系数 DDD,这样参赛选手从任一路标到达别的路标所经过的路径上相邻单元格的海拔高度差不会大于 DDD 。也就是说这个难度系数 DDD 指的是保证所有路标相互可达的最小值。任一单元格和其东西南北四个方向上的单元格都是相邻的。
输入格式
第 111 行两个整数 MMM 和 NNN。第 222 行到第 M+1M+1M+1 行,每行 NNN 个整数描述海拔高度。第 2+M2+M2+M 行到第 1+2M1+2M1+2M
行,每行 NNN 个整数,每个数非 000 即 111,111 表示该单元格是一个路标。
输出格式
一个整数,即赛道的难度系数 DDD。
输入输出样例 #1
输入 #1
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
输出 #1
21
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 510, M = 510;
int high[N][M]; //º£°Î
int flag[N][M]; //᱐
int n, m;
queue <PII> q;
PII p[N * M];
int pnum; //·±ê×ÜÊý
int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, 1, 0, -1 };
int height;
bool st[N][M];
bool check(int x) {
q.push({p[0].x, p[0].y});
int cnt = 1;
st[p[0].x][p[0].y] = true;
while (q.size()) {
auto t = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
int a = t.x + dx[i], b = t.y + dy[i];
if (a < 1 || a > n || b < 1 || b > m) continue;
if (st[a][b]) continue;
if (abs(high[a][b] - high[t.x][t.y]) > x) continue;
q.push({ a, b });
st[a][b] = true;
if (flag[a][b] == 1) {
cnt++;
if (cnt == pnum)
return true;
}
}
}
return false;
}
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
scanf("%d", &high[i][j]);
height = max(height, high[i][j]);
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
scanf("%d", &flag[i][j]);
if (flag[i][j] == 1) p[pnum++] = { i, j };
}
}
//¶þ·Ö´ð°¸
int l = -1, r = height + 1;
while (l + 1 < r) {
while (q.size()) q.pop();
memset(st, false, sizeof(st));
int mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
cout << r;
return 0;
}
后记
作者:zty郑桐羽呀
联系方式:(企鹅 3782663736)
兄弟们给个赞呗
先 赞 后 看 养 成 习 惯