1295: [SCOI2009]最长距离

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=1295

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

Sample Output

4 3 0

001

001

011

000

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 。

题意

题解:

数据范围只有30*30,我们就可以直接枚举起点,然后对于每个点都跑一边spfa,看究竟这个点移动T个障碍物最多能够到那儿就好了。

然后再暴力更新ans。

代码

#include<bits/stdc++.h>
using namespace std;int mp[40][40];
char s[40];
int n,m,t;
double ans;
int inq[40][40];
int dis[40][40];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
struct node
{int x,y;
};
void spfa(int x,int y)
{memset(inq,0,sizeof(inq));node now;now.x=x,now.y=y;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)dis[i][j]=999999;dis[x][y]=mp[x][y];queue<node> Q;Q.push(now);inq[x][y]=1;while(!Q.empty()){now=Q.front();Q.pop();inq[now.x][now.y]=0;for(int i=0;i<4;i++){node next = now;next.x+=dx[i];next.y+=dy[i];if(next.x<1||next.x>n)continue;if(next.y<1||next.y>m)continue;if(dis[next.x][next.y]>dis[now.x][now.y]+mp[next.x][next.y]){if(dis[now.x][now.y]+mp[next.x][next.y]>t)continue;dis[next.x][next.y]=dis[now.x][now.y]+mp[next.x][next.y];if(!inq[next.x][next.y]){Q.push(next);inq[next.x][next.y]=1;}}}}double tmp = 0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(dis[i][j]<=t)tmp=max(tmp,sqrt((x-i)*(x-i)+(y-j)*(y-j)));ans=max(ans,tmp);
}
void solve()
{for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)spfa(i,j);
}
int main()
{scanf("%d%d%d",&n,&m,&t);for(int i=1;i<=n;i++){scanf("%s",s+1);for(int j=1;j<=m;j++)mp[i][j]=s[j]-'0';}solve();printf("%.6f\n",ans);
}

转载于:https://www.cnblogs.com/qscqesze/p/5065027.html

BZOJ 1295: [SCOI2009]最长距离 spfa相关推荐

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

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

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

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

  3. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)

    BZOJ 差分约束: 我是谁,差分约束是啥,这是哪 太真实了= = 插个广告:这里有差分约束详(并不)解. 记\(r_i\)为第\(i\)行整体加了多少的权值,\(c_i\)为第\(i\)列整体加了多 ...

  4. SCOI2009 最长距离

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

  5. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

  6. BZOJ 1026 [SCOI2009]windy数

    1026: [SCOI2009]windy数 Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间 ...

  7. [SCOI2009]最长距离

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

  8. bzoj:1026: [SCOI2009]windy数(数位dp)

    1026: [SCOI2009]windy数 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 7982  Solved: 3593 Descriptio ...

  9. BZOJ 2763: [JLOI2011]飞行路线 【SPFA】

    Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并且航线有一定的价格.Al ...

最新文章

  1. Apache配置--用户认证(针对目录访问)-update2015-05-02
  2. [ffmpeg]安装
  3. 判断resultset是否遍历到最后一条记录_干货:一条SQL语句执行得很慢的原因
  4. iOS开发的一些奇巧淫技2
  5. rabbitmq常用配置
  6. mysql模糊查询 % , _ ,[], [^] 的区别
  7. 79. 单词搜索(dfs)
  8. mfc程序转化为qt_小峰的QT学习笔记
  9. java中有关线程的题目
  10. eclipse信息输出区没有logcat的解决方法
  11. cwinthread*线程指针怎么销毁结束_C++知识点:智能指针
  12. 软件工程 speedsnail 第二次冲刺1次
  13. 装上这 10个vscode插件,python才真的是无敌的存在!
  14. RJ45口线序的理解
  15. linux中的计划任务
  16. 浅谈Sun Solaris启动
  17. 教你如何用C/C++做高大上的软件界面
  18. ES 之 Routing
  19. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片
  20. excel不显示0_Excel数值为0不显示的三种解决方法

热门文章

  1. 初级web前端必会知识点:HTML部分,看看你都会吗?
  2. 零基础学前端,自学还是培训机构?
  3. javascript是什么?有哪些特点?
  4. 微软官方解读 Win11 操作系统
  5. php 实现application,PHP中实现ASP中的Application 功能
  6. c语言任意两个整数相减_大整数加减运算的C语言实现
  7. HDU-1867A + B for you again(kmp)
  8. 啊哈算法-游戏币问题(dp)
  9. ubuntu下使用yocto制作龙芯文件系统
  10. python记录(4)- lxml模块创建xml文件