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 ...
随机推荐
- jsTree使用记录
1. ajax请求生成jsTree <span style="font-size:14px;"><script> var r = []; // 权限树中被选 ...
- PAC代理语法含义与书写规范
一直以来使用ShadowSocksFQ,基本上默认的PAC代理模式己能满足所需,实在个别pac不方便的就转成用全局代理模式也能愉快FQ. 只是最近学习前端的知识,需要FQ访问 MDN web docs ...
- * 获取页面参数 * @return 参数打印
/** * 获取页面参数 * @return 参数打印 */ GetUrlParam: function(paraName) { var url = document.location.toStrin ...
- SpringMVC与MyBatis整合方法
一.springmvc+mybaits的系统架构: 第一步:整合dao层 mybatis和spring整合,通过spring管理mapper接口. 使用mapper的扫描器自动扫描mapper接口在s ...
- Django REST framework 内置访问频率控制
对匿名用户采用 IP 控制访问频率,对登录用户采用 用户名 控制访问频率. from rest_framework.throttling import SimpleRateThrottle class ...
- Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器
目录 Linux - nginx+uWSGI+django+virtualenv+supervisor发布web服务器 crm django项目部署流程 使用supervisro启动uwsgi,退出虚 ...
- Git 基础教程 之 标签
所谓标签:就是一个让人容易记住的有意义的名字,与某个commit绑在一起. 创建标签:①切回需要打标签的分支上 ② git tag <name> 默认标 ...
- 第三节:初识pandas之DataFrame(上)
DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表.
- 1、深度学习模型的基本结构——RNN
本系列为深度学习课程笔记,课程网址在http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html 深度学习的基本步骤:定义模型-->定义损失函数 ...
- noip模拟赛 解谜游戏
题目描述LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画.幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它.老板有一个n*m的矩阵,他想找一个 ...