luogu4162 最长距离 (dijkstra)
相邻格子连双向边,如果一个点有障碍,那进它的边权就是1,否则是0
这样的话,两点间的最短路+[起始点有障碍],就是从一个点走到另一个需要清除的障碍的个数
求出最短路后枚举这两个点就可以了
然而30*30还是太大跑不开floyd,只能写一个dijkstra
#include<bits/stdc++.h>
#define CLR(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pa;
const int maxn=,npm=; inline ll rd(){
ll x=;char c=getchar();int neg=;
while(c<''||c>''){if(c=='-') neg=-;c=getchar();}
while(c>=''&&c<='') x=x*+c-'',c=getchar();
return x*neg;
} int id[maxn][maxn];
int dis[npm][npm];
int N,M,T;
char can[npm][npm];
priority_queue<pa,vector<pa>,greater<pa> > q;
bool flag[npm]; inline void chkmin(int s,int x,int y){
if(dis[s][x]>y)
dis[s][x]=y,q.push(make_pair(y,x));
} inline void getdis(int s){
CLR(dis[s],);CLR(flag,);
dis[s][s]=;q.push(make_pair(,s));
while(!q.empty()){
int p=q.top().second;q.pop();
// printf("~%d %d %d\n",s,p,dis[s][p]);
if(flag[p]) continue;flag[p]=;
int i=(p-)/M+,j=p%M;if(!j) j=M;
if(i<N) chkmin(s,id[i+][j],dis[s][p]+can[i+][j]-'');
if(i>) chkmin(s,id[i-][j],dis[s][p]+can[i-][j]-'');
if(j<M) chkmin(s,id[i][j+],dis[s][p]+can[i][j+]-'');
if(j>) chkmin(s,id[i][j-],dis[s][p]+can[i][j-]-'');
}
} int main(){
//freopen("","r",stdin);
int i,j,k=;
N=rd(),M=rd(),T=rd();
for(i=;i<=N;i++){
scanf("%s",can[i]+);
for(j=;j<=M;j++)
id[i][j]=++k;
}
for(i=;i<=N;i++){
for(j=;j<=M;j++){
getdis(id[i][j]);
}
}
double ans=;
for(i=;i<=N;i++){
for(j=;j<=M;j++){
for(k=;k<=N;k++){
for(int l=;l<=M;l++){
if(dis[id[i][j]][id[k][l]]+can[i][j]-''<=T) ans=max(ans,sqrt(0.0+(k-i)*(k-i)+(l-j)*(l-j)));
}
}
}
}
printf("%.6lf\n",ans);
return ;
}
luogu4162 最长距离 (dijkstra)的更多相关文章
- [luogu4162 SCOI2009] 最长距离(最短路)
传送门 Solution 题目是最长路,其实是最短路ヽ(ー_ー)ノ 把进入障碍点的边设为1,其他为0.枚举每个点为起点找距离<=T的点,更新答案 Code //By Menteur_Hxy #i ...
- POJ 2253 Frogger(Dijkstra变形——最短路径最大权值)
题目链接: http://poj.org/problem?id=2253 Description Freddy Frog is sitting on a stone in the middle of ...
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- 最短路径算法-Dijkstra
Dijkstra是解决单源最短路径的一般方法,属于一种贪婪算法. 所谓单源最短路径是指在一个赋权有向图中,从某一点出发,到另一点的最短路径. 以python代码为例,实现Dijkstra算法 1.数据 ...
- [板子]最小费用最大流(Dijkstra增广)
最小费用最大流板子,没有压行.利用重标号让边权非负,用Dijkstra进行增广,在理论和实际上都比SPFA增广快得多.教程略去.转载请随意. #include <cstdio> #incl ...
- POJ 2253 Frogger(Dijkstra)
传送门 Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39453 Accepted: 12691 Des ...
- POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)
传送门 Til the Cows Come Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 46727 Acce ...
- Dijkstra 算法
all the nodes should be carectorized into three groups: (visited, front, unknown) we should pay spec ...
- 51nod 1459 迷宫游戏 (最短路径—Dijkstra算法)
题目链接 中文题,迪杰斯特拉最短路径算法模板题. #include<stdio.h> #include<string.h> #define INF 0x3f3f3f3f ],v ...
随机推荐
- 使用json读写文件中的数据
把json的数据写入到文件中 import json with open('data.json','w+') as f: json.dump({"name":"张彪&qu ...
- oracle导出用户下单表或者多表,导入到别的服务器用户下
导出 exp 用户名/密码 file=存放dmp的名称的目录 statistics=none tables =(表名,表名,表名) exp creditfw/credit file=d:\te ...
- Quartz框架学习(1)—核心层次结构
Quartz框架学习 Quartz(任务调度)框架的核心组件: job:任务.即任务调度行为中所要调度的对象. trigger:触发器.是什么促使了一个任务的调度?当然是时间.这也算事件驱动类型程序. ...
- 二、kubernetes环境搭建
主要内容 1.环境准备(2主机) 2.安装流程 3.问题分析 4.总结 环境配置(2主机) 系统:CentOS 7.3 x64 网络:局域网(VPC) 主机: master:172.16.0.17 m ...
- Lodop扁宽横向241mm*93mm这种怪异的纸张如何设置
Lodop中如果设置LODOP.SET_PRINT_PAGESIZE(2,'241mm','93mm','');,会发现实际的纸张和自己设置的不同,不只是打印机不识别,xps和pdf虚拟打印机也不能正 ...
- sql行转列实例
select gh ,xm , max(A.bz) as bz , max(A.jcz) as jcz , max(A.dl) as dl , max(A.czzx) as czzx , max(A. ...
- 使用Spring的@Scheduled实现定时任务参数详解
Spring配置文件xmlns加入 xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocati ...
- linux环境 :LIBRARY_PATH, LD_LIBRARY_PATH区别
参考: https://www.cnblogs.com/mylinux/p/4955448.html LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的两个环境变量,二者的含义和 ...
- codeforces-div2-449-B
题意:确定一个回文偶数十进制数字,输入k和q,求前k小的和对q取余的值 解题思路:首先确定一个,第k个回文偶数一定前半段一定是k,比如第12个,这个数就是1221: 代码: #include<i ...
- Nginx 磁盘IO的优化
L:132