题解 [BZOJ1295][SCOI2009] 最长距离
解析
\(n\)只有\(30\)可以直接枚举每个矩形,
判断他们的左上角到右下角或右上角到左上角的最短路是否小于\(T\).
最短路可以用\(dijkstra\).
一开始想用\(DP\)写最短路后来才知道思路有问题(因为最短路的方案可能不在矩形中).
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
const int N=35;
struct edge{int to,next,w;}e[N*N*4];
int n,m,T,a[N][N];
int f[N*N][N*N],id[N][N],tot=0;
int ans=0,v[N*N];
int head[N*N],cnt=0;
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
priority_queue < pair<int,int> > que;
inline void add(int x,int y,int w){
e[++cnt]=(edge){head[x],y,w};head[x]=cnt;
}
inline void dji(int s){
memset(v,0,sizeof(v));
que.push(make_pair(f[s][s],s));
while(!que.empty()){
int x=que.top().second;que.pop();
if(v[x]) continue;v[x]=1;
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(f[s][k]>f[s][x]+e[i].w){
f[s][k]=f[s][x]+e[i].w;
que.push(make_pair(-f[s][k],k));
}
}
}
}
int main(){
n=read();m=read();T=read();
for(int i=1;i<=n;i++){
char c[N];cin>>c;
for(int j=0;j<m;j++) a[i][j+1]=c[j]-'0';
}
memset(f,0x3f,sizeof(f));
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) id[i][j]=++tot;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
for(int k=0;k<4;k++){
int x=i+dx[k],y=j+dy[k];
if(!x||x>n||!y||y>m) continue;
add(id[i][j],id[x][y],a[x][y]);
}
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) f[id[i][j]][id[i][j]]=a[i][j],dji(id[i][j]);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int k=i;k<=n;k++){
for(int l=j;l<=m;l++){
if(f[id[i][j]][id[k][l]]<=T||f[id[i][l]][id[k][j]]<=T) ans=max(ans,(k-i)*(k-i)+(l-j)*(l-j));
}
}
}
}
double t=sqrt(ans);printf("%.6f\n",t);
return 0;
}
题解 [BZOJ1295][SCOI2009] 最长距离的更多相关文章
- [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]最长距离
bfs最短路. 写的真丑... #include<cstdio> #include<algorithm> #include<cstring> #include< ...
- 【spfa】bzoj1295 [SCOI2009]最长距离
题意:给你一个n*m的点阵.有些点是障碍,求一个欧几里得距离最大的点对(A,B),使得在移走的障碍≤T的情况下,可以从A走到B. 建图,跑n*m次spfa,求出从 每个点 出发到 其他所有点 的 经过 ...
- 【BZOJ1295】[SCOI2009]最长距离(最短路)
[BZOJ1295][SCOI2009]最长距离(最短路) 题面 BZOJ 洛谷 题解 这题很妙啊. 我们枚举一个点,只需要考虑到他的最远点就行了,显然只需要考虑一个点即可.那么这两个点之前联通的最小 ...
- BZOJ 1295: [SCOI2009]最长距离 spfa
1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...
- 1295: [SCOI2009]最长距离
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 960 Solved: 498[Submit][Status ...
- bzoj 1295: [SCOI2009]最长距离
题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1165 Solved: 619[Submit][ ...
- BZOJ 1295: [SCOI2009]最长距离( 最短路 )
把障碍点看做点(边)权为1, 其他为0. 对于每个点跑spfa, 然后和它距离在T以内的就可以更新答案 ------------------------------------------------ ...
随机推荐
- Linux 下安装 redis5.0
1.redis 安装 wget http://download.redis.io/rele... tar -zxvf redis-5.0.5.tar.gz cd redis-5.0.5.tar.gz ...
- 第八章 ZYNQ-MIZ701 软硬调试高级技巧
软件和硬件的完美结合才是SOC的优势和长处,那么开发ZYNQ就需要掌握软件和硬件开发的调试技巧,这样才能同时分析软件或者硬件的运行情况,找到问题,最终解决.那么本章将通过一个简单的例子带大家使用v ...
- Ansible 自动化工具入门
Ansible 配置 Ansible 简单管理 下面的小实验,我们将采用以下的IP地址规划,请自行配置好. [实验环境] [状态] [主机列表] [python版本] 控制机 192.168.1.10 ...
- CDN内容分发
什么是CDN内容分发: CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分 ...
- 常用bat文件
rmLog.bat @echo offpause >nul | echo 按任意键继续3pause >nul | echo 按任意键继续2pause >nul | echo 按任意键 ...
- JAVA学习篇--静态代理VS动态代理
本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(CMS)-第二章 入门篇-快速入门ASP.NET Core看这篇就够了
.NET Core实战项目之CMS 第二章 入门篇-快速入门ASP.NET Core看这篇就够了 原文链接:https://www.cnblogs.com/yilezhu/p/9985451.ht ...
- 你真的了解new function(){} 和 function(){}()吗?
只要 new 表达式之后的 constructor 返回(return)一个引用对象(数组,对象,函数等),都将覆盖new创建的匿名对象,如果返回(return)一个原始类型(无 return 时其实 ...
- springcloud必知功能使用教程
springcloud Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册.配置中心.消息总线.负载均衡.断路 ...
- sed交换任意两行
命令: sed -n 'A{h;n;B!{:a;N;C!ba;x;H;n};x;H;x};p' 文件名 解释: A.B分别是需要交换的行,C是B-1 其中,A.B.C可以是行号,也可以通过匹配模式,如 ...