B1295 [SCOI2009]最长距离 最短路
就是一道最短路的裸题,直接跑spfa就行了。(spfa死了)
最后在答案处判断是否障碍物太多,然后就直接找最大值就行。
(数据特别水,我错误算法60)
题干:
Description windy有一块矩形土地,被分为 N*M 块 * 的小格子。 有的格子含有障碍物。 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离。 如果从格子A不可以走到格子B,就没有距离。 如果格子X和格子Y有公共边,并且X和Y均不含有障碍物,就可以从X走到Y。 如果windy可以移走T块障碍物,求所有格子间的最大距离。 保证移走T块障碍物以后,至少有一个格子不含有障碍物。
Input
输入文件maxlength.in第一行包含三个整数,N M T。 接下来有N行,每行一个长度为M的字符串,''表示空格子,''表示该格子含有障碍物。
Output
输出文件maxlength.out包含一个浮点数,保留6位小数。
Sample Input
【输入样例一】 【输入样例二】 【输入样例三】 Sample Output
【输出样例一】
1.414214
【输出样例二】
3.605551
【输出样例三】
2.828427
HINT
%的数据,满足 <= N,M <= ; <= T <= 。 %的数据,满足 <= N,M <= ; <= T <= 。 %的数据,满足 <= N,M <= ; <= T <= 。
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<ctime>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
#define duke(i,a,n) for(int i = a;i <= n;i++)
#define lv(i,a,n) for(int i = a;i >= n;i--)
#define clean(a) memset(a,0,sizeof(a))
const int INF = << ;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{
char c;
bool op = ;
while(c = getchar(), c < '' || c > '')
if(c == '-') op = ;
x = c - '';
while(c = getchar(), c >= '' && c <= '')
x = x * + c - '';
if(op) x = -x;
}
template <class T>
void write(T x)
{
if(x < ) putchar('-'), x = -x;
if(x >= ) write(x / );
putchar('' + x % );
}
int n,m,t;
int dx[] = {,,-,};
int dy[] = {,-,,};
int dis[][],a[][],mp[][];
bool inq[][];
bool p[][];
char s[];
db ans = ;
struct node
{
int x,y;
}q[];
void getans(int x,int y)
{
duke(i,x,n)
{
duke(j,,m)
{
if(dis[i][j] <= t && (y - j) * (y - j) + (x - i) * (x - i) > ans)
ans = (y - j) * (y - j) + (x - i) * (x - i);
}
}
}
void spfa(int x,int y)
{
int nowx,nowy,t = ,w = ,nx,ny;
q[].x = x;q[].y = y;
clean(inq);
memset(dis,,sizeof(dis));
inq[x][y] = ;
dis[x][y] = mp[x][y];
while(t <= w)
{
nowx = q[t].x;nowy = q[t].y;
t++;
for(int i = ;i < ;i++)
{
nx = nowx + dx[i];
ny = nowy + dy[i];
if(nx > n || nx < x || ny > m || ny < )
continue;
if(dis[nowx][nowy] + mp[nx][ny] < dis[nx][ny])
{
dis[nx][ny] = dis[nowx][nowy] + mp[nx][ny];
if(!inq[nx][ny])
{
q[++w].x = nx;
q[w].y = ny;
inq[nx][ny] = ;
}
}
}
inq[nowx][nowy] = ;
}
getans(x,y);
}
int main()
{
read(n);read(m);read(t);
duke(i,,n)
{
scanf("%s",s);
duke(j,,m - )
mp[i][j + ] = s[j] - '';
}
duke(i,,n)
{
duke(j,,m)
{
spfa(i,j);
}
}
printf("%.6lf",sqrt(ans));
return ;
}
/*
3 3 0
001
001
110
*/
B1295 [SCOI2009]最长距离 最短路的更多相关文章
- BZOJ 1295: [SCOI2009]最长距离( 最短路 )
把障碍点看做点(边)权为1, 其他为0. 对于每个点跑spfa, 然后和它距离在T以内的就可以更新答案 ------------------------------------------------ ...
- [BZOJ1295][SCOI2009]最长距离 最短路+枚举
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1683 Solved: 912[Submit][Statu ...
- BZOJ1295 [SCOI2009]最长距离 最短路 SPFA
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1295 题意概括 有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果 ...
- 【BZOJ1295】[SCOI2009]最长距离(最短路)
[BZOJ1295][SCOI2009]最长距离(最短路) 题面 BZOJ 洛谷 题解 这题很妙啊. 我们枚举一个点,只需要考虑到他的最远点就行了,显然只需要考虑一个点即可.那么这两个点之前联通的最小 ...
- BZOJ_1295_[SCOI2009]最长距离_dij
BZOJ_1295_[SCOI2009]最长距离_dij Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那 ...
- BZOJ 1295: [SCOI2009]最长距离 spfa
1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...
- bzoj 1295: [SCOI2009]最长距离
题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1165 Solved: 619[Submit][ ...
- 1295: [SCOI2009]最长距离
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 960 Solved: 498[Submit][Status ...
- [luogu4162 SCOI2009] 最长距离(最短路)
传送门 Solution 题目是最长路,其实是最短路ヽ(ー_ー)ノ 把进入障碍点的边设为1,其他为0.枚举每个点为起点找距离<=T的点,更新答案 Code //By Menteur_Hxy #i ...
随机推荐
- linux下tomcat启动正常,但是外部浏览器无法访问
这种情况一般是由于系统防火墙设置问题导致的,这次遇到的系统是centos 7.2,防火墙由iptables改成了firewall,因此停止防火墙的命令应该是: systemctl disable fi ...
- Zynq7000系列之芯片系统结构概述
相比较经典的FPGA,Zynq7000系列最大的特点是将处理系统PS和可编程资源PL分离开来,固化了PS系统的存在,实现了真正意义上的SOC(System On Chip). 1. Zynq7000 ...
- CSS (层叠样式表)
层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.CSS不仅可以静态 ...
- 如何创建一个项目,让gitlab自动触发jenkins进行构建
前进是:你已经配置好jenkins+gitlab自动化布置了,这里只是常规构建新的项目时,需要做的配置,记录下来,以免忘了又着急 参考这篇博客: https://www.jianshu.com/p/e ...
- kernel中的函数指针
经常会看到这类的结构体: 这个结构体中 有几个函数指针, 这种方式的好处,可以有多种具体的函数实现,但是,这样就统一了接口 struct address_space_operations { int ...
- php第十九节课
JQUERY <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- 新手入门学习angular.js的心得体会
看了一天的angular.js,只要记住这是关于双向数据绑定 和单向数据绑定就可以,看看开发文档,短时间内还是可以直接入手的,看个人理解能力(我是小白). 这几天开始着手学习angularjs的有关知 ...
- Django 初学
一.什么是web框架 框架,即framework ['fremwɝk],特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞 ...
- ubuntu18.04安装chrome浏览器
前几天把系统弄崩溃了,弄了好久也没弄好,索性直接装18.04,下面是安装chrom浏览器的步骤,网络上照着16.04安装的,应该是一样的 启动终端. 输入以下命令: sudo wget http:// ...
- 《零压力学Python》 之 第一章知识点归纳
第一章(初识Python)知识点归纳 Python是从ABC语言衍生而来的 ABC语言是Guido参与设计的一种教学语言,为非专业编程人员所开发的. Python是荷兰程序员 Guido Van Ro ...