BZOJ1295 [SCOI2009]最长距离
Description
windy有一块矩形土地,被分为 N*M 块 1*1 的小格子。 有的格子含有障碍物。 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离。 如果从格子A不可以走到格子B,就没有距离。 如果格子X和格子Y有公共边,并且X和Y均不含有障碍物,就可以从X走到Y。 如果windy可以移走T块障碍物,求所有格子间的最大距离。 保证移走T块障碍物以后,至少有一个格子不含有障碍物。
Input
输入文件maxlength.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,'0'表示空格子,'1'表示该格子含有障碍物。
Output
输出文件maxlength.out包含一个浮点数,保留6位小数。
Sample Input
3 3 0
001
001
110
【输入样例二】
4 3 0
001
001
011
000
【输入样例三】
3 3 1
001
001
001
Sample Output
1.414214
【输出样例二】
3.605551
【输出样例三】
2.828427
HINT
20%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 0 。 40%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 2 。 100%的数据,满足 1 <= N,M <= 30 ; 0 <= T <= 30 。
题解
枚举答案中两个格子中的一个,暴力Dijkstra,每经过一个1距离就加1,距离起点距离不超过T的就是移走至多T块障碍物能到的格子。
附代码:
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <queue>
const int N = 50;
int map[N][N];
struct HeapNode{int i, j, d;HeapNode(int i = 0, int j = 0, int d = 0) : i(i), j(j), d(d) {}bool operator<(const HeapNode &x)const{return d > x.d;}
};
std::priority_queue<HeapNode> Q;
int dis[N][N], n, m, T, ans;
const int d[][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
void Dijkstra(int si, int sj) {std::fill(dis[0], dis[n], 10000);while (!Q.empty()) Q.pop();Q.push(HeapNode(si, sj, dis[si][sj] = map[si][sj]));while (!Q.empty()) {HeapNode x = Q.top(); Q.pop();if (x.d != dis[x.i][x.j]) continue;if (x.d > T) return;int ui = x.i, uj = x.j;ans = std::max(ans, (ui - si) * (ui - si) + (uj - sj) * (uj - sj));for (int k = 0; k < 4; ++k) {int vi = ui + d[k][0], vj = uj + d[k][1];if (~vi && ~vj && vi < n && vj < m && dis[vi][vj] > x.d + map[vi][vj])Q.push(HeapNode(vi, vj, dis[vi][vj] = x.d + map[vi][vj]));}}
}
int main() {scanf("%d%d%d", &n, &m, &T);for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j)scanf("%1d", &map[i][j]);ans = 0;for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j)Dijkstra(i, j);printf("%.6f", sqrt((float)ans));return 0;
}
转载于:https://www.cnblogs.com/y-clever/p/7028955.html
BZOJ1295 [SCOI2009]最长距离相关推荐
- bzoj 1295: [SCOI2009]最长距离
题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1165 Solved: 619 [Submit ...
- BZOJ 1295: [SCOI2009]最长距离 spfa
1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...
- bzoj 1295: [SCOI2009]最长距离(SPFA)
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1697 Solved: 919 [Submit][Sta ...
- SCOI2009 最长距离
洛谷 BZOJ 分析 图论题.直接 \(dfs\) 加一点剪枝就能过了. 代码 #include <cmath> #include <cstdio> #include < ...
- [SCOI2009]最长距离
Description windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A ...
- B1295 [SCOI2009]最长距离 最短路
就是一道最短路的裸题,直接跑spfa就行了.(spfa死了) 最后在答案处判断是否障碍物太多,然后就直接找最大值就行. (数据特别水,我错误算法60) 题干: Descriptionwindy有一块矩 ...
- 退役前的做题记录2.0
退役前的做题记录2.0 最近在刷省选题......大致上是按照省份刷的. 不过上面的题目顺序是按照写题的顺序排列的,所以可能会有点乱哈. [BZOJ2823][AHOI2012]信号塔 最小圆覆盖,随 ...
- 【水】【SCOI】 精简题解
第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
最新文章
- 大白话详解5种网络IO模型
- 在虚拟机上linux系统上上网
- UML系统分析与设计01-准备
- 2020 云原生技术 7 大领域趋势全预测
- 【学术相关】翻倍!研究生招生规模持续扩张!
- 《统计学》学习笔记之时间序列分析和预测
- [你必须知道的.NET]第二十九回:.NET十年(上)
- 智慧讲台接收画板协议规划
- 矢量算法java,矢量线的一种栅格化算法
- Java扫雷游戏的设计与实现毕业设计论文
- IJCAI21审稿机制介绍:提交时间、提交流程、注意事项等
- 颈椎病自我治疗预防颈椎病
- 关于MacBook蓝牙键盘鼠标耳机等设备各种的卡顿、黏滞、断开连接等各种问题解决方案
- 超低功耗MCU的选择方法
- Canvas--画直线
- 在互联网中,资源免费共享还能走多久!
- 网易控股的立马理财逾期,网易前员工爆料:把内部员工当韭菜
- 《概率论与数理统计》-第二章 随机变量及其分布-第一节 离散型随机变量及其分布-笔记
- JavaScript打字小游戏
- [opencv完整项目详解] 传统图像算法解决路标的检测和识别(改进升级版)