B1295 [SCOI2009]最长距离 最短路
就是一道最短路的裸题,直接跑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]最长距离 最短路相关推荐
- 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 < ...
- BZOJ1295 [SCOI2009]最长距离
Description windy有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格 ...
- [SCOI2009]最长距离
Description windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A ...
- 【水】【SCOI】 精简题解
第二弹 [SCOI2009]生日快乐 搜索.递归划分问题. [SCOI2009]游戏 记忆化搜索.枚举素因子,DP. [SCOI2009]windy数 数位DP,分块统计. [SCOI2009]最长距 ...
- BZOJ ac100题存档
不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
最新文章
- 最后一周报名微生物组-宏基因组分析(线上/线下同步开课,2020最后一期)
- Nautilus-Open-Terminal : 可随处打开终端的 Nautilus 插件
- mac显示/隐藏文件
- Hibernate的配置详解
- AcWing - 171 送礼物(双向dfs)
- linux内核启动后门,Linux内核模块入门之简单内核后门
- Liunx服务器部署系列
- java 弹窗选择_如何在java中点击button弹出一个选择框
- 安装过程中检测数据库是否已经存在
- 802.1W RSTP
- 安装 Linux 系统,如何选择操作系统和电脑硬件
- 巧妙的使用RDP报表工具(免费报表工具、报表设计器)Excl绘制报表
- orbSLAM2 之 追踪参考关键帧
- mysql超市管理系统怎么写_java+mysql超市进销存管理系统设计+源代码
- Windows远程桌面连接Mac OS X
- 解决uniapp静态文件字体包太大打包大小超出限制
- IntelliJ IDEA查看类层次结构图
- 百度地图API Android SDK 常见问题
- 屡次让拳头翻车的ping:作者因车祸英年早逝,千行源码改变世界
- 邮政社招笔试题库_中国邮政 招聘考试试题及答案--总括版