就是一道最短路的裸题,直接跑spfa就行了。(spfa死了)

最后在答案处判断是否障碍物太多,然后就直接找最大值就行。

(数据特别水,我错误算法60)

题干:

Descriptionwindy有一块矩形土地,被分为 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 。

代码:

#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 = 1 << 30;
typedef long long ll;
typedef double db;
template <class T>
void read(T &x)
{char c;bool op = 0;while(c = getchar(), c < '0' || c > '9')if(c == '-') op = 1;x = c - '0';while(c = getchar(), c >= '0' && c <= '9')x = x * 10 + c - '0';if(op) x = -x;
}
template <class T>
void write(T x)
{if(x < 0) putchar('-'), x = -x;if(x >= 10) write(x / 10);putchar('0' + x % 10);
}
int n,m,t;
int dx[5] = {0,0,-1,1};
int dy[5] = {1,-1,0,0};
int dis[40][40],a[40][40],mp[40][40];
bool inq[40][40];
bool p[40][40];
char s[40];
db ans = 0;
struct node
{int x,y;
}q[100010];
void getans(int x,int y)
{duke(i,x,n){duke(j,1,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 = 1,w = 2,nx,ny;q[1].x = x;q[1].y = y;clean(inq);memset(dis,127,sizeof(dis));inq[x][y] = 1;dis[x][y] = mp[x][y];while(t <= w){nowx = q[t].x;nowy = q[t].y;t++;for(int i = 0;i < 4;i++){nx = nowx + dx[i];ny = nowy + dy[i];if(nx > n || nx < x || ny > m || ny < 1)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] = 1;}}}inq[nowx][nowy] = 0;}getans(x,y);
}
int main()
{read(n);read(m);read(t);duke(i,1,n){scanf("%s",s);duke(j,0,m - 1)mp[i][j + 1] = s[j] - '0';}duke(i,1,n){duke(j,1,m){spfa(i,j);}}printf("%.6lf",sqrt(ans));return 0;
}
/*
3 3 0
001
001
110
*/

转载于:https://www.cnblogs.com/DukeLv/p/9657761.html

B1295 [SCOI2009]最长距离 最短路相关推荐

  1. bzoj 1295: [SCOI2009]最长距离

    题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1165  Solved: 619 [Submit ...

  2. BZOJ 1295: [SCOI2009]最长距离 spfa

    1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...

  3. bzoj 1295: [SCOI2009]最长距离(SPFA)

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1697  Solved: 919 [Submit][Sta ...

  4. SCOI2009 最长距离

    洛谷 BZOJ 分析 图论题.直接 \(dfs\) 加一点剪枝就能过了. 代码 #include <cmath> #include <cstdio> #include < ...

  5. BZOJ1295 [SCOI2009]最长距离

    Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格 ...

  6. [SCOI2009]最长距离

    Description windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A ...

  7. 【水】【SCOI】 精简题解

    第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...

  8. BZOJ ac100题存档

    不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...

  9. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

最新文章

  1. 最后一周报名微生物组-宏基因组分析(线上/线下同步开课,2020最后一期)
  2. Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件
  3. mac显示/隐藏文件
  4. Hibernate的配置详解
  5. AcWing - 171 送礼物(双向dfs)
  6. linux内核启动后门,Linux内核模块入门之简单内核后门
  7. Liunx服务器部署系列
  8. java 弹窗选择_如何在java中点击button弹出一个选择框
  9. 安装过程中检测数据库是否已经存在
  10. 802.1W RSTP
  11. 安装 Linux 系统,如何选择操作系统和电脑硬件
  12. 巧妙的使用RDP报表工具(免费报表工具、报表设计器)Excl绘制报表
  13. orbSLAM2 之 追踪参考关键帧
  14. mysql超市管理系统怎么写_java+mysql超市进销存管理系统设计+源代码
  15. Windows远程桌面连接Mac OS X
  16. 解决uniapp静态文件字体包太大打包大小超出限制
  17. IntelliJ IDEA查看类层次结构图
  18. 百度地图API Android SDK 常见问题
  19. 屡次让拳头翻车的ping:作者因车祸英年早逝,千行源码改变世界
  20. 邮政社招笔试题库_中国邮政 招聘考试试题及答案--总括版

热门文章

  1. Generator 实现
  2. 常用的sql语句用法
  3. android 调试好事工具类,Android 工具类之总结 Hua
  4. vs 警告被视为错误
  5. 我的docker随笔18:阿里云docker仓库的使用
  6. ARMLinux下Alignment trap的一些测试
  7. 在图片中添加自己的文本信息(PNG及JPEG格式)
  8. 当我的生活只剩下写代码时
  9. vue-cli目录结构介绍
  10. python scheduler 定时执行_python使用apscheduler做定时任务的管理