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 ...
 
随机推荐
- IDEA通过Git同步代码到Coding
			
准备工作: (1)在本地创建好项目 (2)在coding创建好项目,并设置公开 1.创建Git仓库 2.选择对应的本地项目文件夹 以上两步相当于在项目文件夹中git bash here 并 ...
 - 哈尔滨工程大学ACM预热赛
			
https://ac.nowcoder.com/acm/contest/554#question A #include <bits/stdc++.h> using namespace st ...
 - <c:forEach varStatus="status">中 varStatus的作用
			
varStatus是<c:forEach>jstl循环标签的一个属性,varStatus属性. varStatus=“status”事实上定义了一个status名的对象作为varStatu ...
 - 运行pip报错:Fatal error in launcher: Unable to create process using '"'
			
参考: https://blog.csdn.net/cjeric/article/details/73518782
 - k8s HPA自动收缩
			
HPA自动收缩 autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量 #创建一个replicaset测试 [r ...
 - Prism框架研究(三)
			
这一篇主要用来介绍一下基于Prism Library中的核心服务以及如何配置Container,还有一个重要的部分是如何管理各个组件之间的依赖性,下面就这些内容来做一一的介绍. 1 Prism中的核心 ...
 - WPF中关于对前台Xaml中Triggers的一些重要思考。
			
今天在做一个小Demo的时候碰到了一个比较奇怪的问题,就是其中一个Trigger始终无法执行,<Trigger Property="Popup.IsOpen" Value=& ...
 - Lodop删除语句Deleted只能内嵌设计维护可用
			
有些人想用类似如下的语句删除打印项,或判断后把不需要的打印项删除,这种删除语句只能在打印设计或打印维护内嵌的时候使用,打印预览内嵌也不能使用.LODOP.SET_PRINT_STYLEA(2,'Del ...
 - How to remove unwant Internet Explorer Context Menu
			
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt
 - python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样
			
python与java的内存机制不一样;java的方法会进入方法区直到对象消失 方法才会消失;python的方法是对象每次调用都会创建新的对象 内存地址都不i一样