题意:给你一个n*m的点阵、有些点是障碍,求一个欧几里得距离最大的点对(A,B),使得在移走的障碍≤T的情况下,可以从A走到B。

建图,跑n*m次spfa,求出从 每个点 出发到 其他所有点 的 经过的障碍数。若这个值<=T,则可以用来更新答案。

 #include<cstdio>
#include<queue>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int dx[]={,,,-},dy[]={,-,,};
queue<int>q;
char map[][];
int n,en,m,K,first[],next[],v[],w[],dis[],num[][];
bool inq[];
double ans;
void init(const int &s)
{memset(dis,0x7f,sizeof(dis)); inq[s]=true; dis[s]=; q.push(s);}
void AddEdge(const int &U,const int &V,const int &W)
{v[++en]=V; w[en]=W; next[en]=first[U]; first[U]=en;}
int sqr(const int &x){return x*x;}
double Euclid_Dis(const int &x1,const int &y1,const int &x2,const int &y2)
{return sqrt(sqr(x1-x2)+sqr(y1-y2));}
void spfa(const int &s)
{
init(s);
while(!q.empty())
{
int cur=q.front();
for(int i=first[cur];i;i=next[i])
if(dis[v[i]]>dis[cur]+w[i])
{
dis[v[i]]=dis[cur]+w[i];
if(!inq[v[i]])
{
q.push(v[i]);
inq[v[i]]=true;
}
}
q.pop(); inq[cur]=false;
}
}
void calc(const int &x,const int &y)
{
K-=(map[x][y]=='');
for(int i=;i<n;i++)
for(int j=;j<m;j++)
if(dis[num[i][j]]<=K)
ans=max(ans,Euclid_Dis(x,y,i,j));
K+=(map[x][y]=='');
}
void BuildGraph()
{
for(int i=;i<n;i++)
for(int j=;j<m;j++)
for(int k=;k<;k++)
{
int tx=i+dx[k],ty=j+dy[k];
if(tx>=&&tx<n&&ty>=&&ty<n)
if(map[tx][ty]=='') AddEdge(num[i][j],num[tx][ty],);
else AddEdge(num[i][j],num[tx][ty],);
}
}
int main()
{
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<n;i++)
scanf("%s",map[i]);
for(int i=;i<n;i++)
for(int j=;j<m;j++)
num[i][j]=++en;
en=;
BuildGraph();
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
spfa(num[i][j]);
calc(i,j);
}
printf("%.6lf\n",ans);
return ;
}

【spfa】bzoj1295 [SCOI2009]最长距离的更多相关文章

  1. [BZOJ1295][SCOI2009]最长距离 最短路+枚举

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1683  Solved: 912[Submit][Statu ...

  2. BZOJ1295 [SCOI2009]最长距离 最短路 SPFA

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1295 题意概括 有一块矩形土地,被分为 N*M 块 1*1 的小格子. 有的格子含有障碍物. 如果 ...

  3. bzoj1295: [SCOI2009]最长距离

    bfs最短路. 写的真丑... #include<cstdio> #include<algorithm> #include<cstring> #include< ...

  4. 题解 [BZOJ1295][SCOI2009] 最长距离

    题面 解析 \(n\)只有\(30\)可以直接枚举每个矩形, 判断他们的左上角到右下角或右上角到左上角的最短路是否小于\(T\). 最短路可以用\(dijkstra\). 一开始想用\(DP\)写最短 ...

  5. 【BZOJ1295】[SCOI2009]最长距离(最短路)

    [BZOJ1295][SCOI2009]最长距离(最短路) 题面 BZOJ 洛谷 题解 这题很妙啊. 我们枚举一个点,只需要考虑到他的最远点就行了,显然只需要考虑一个点即可.那么这两个点之前联通的最小 ...

  6. BZOJ 1295: [SCOI2009]最长距离 spfa

    1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...

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

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

  8. BZOJ 1295: [SCOI2009]最长距离( 最短路 )

    把障碍点看做点(边)权为1, 其他为0. 对于每个点跑spfa, 然后和它距离在T以内的就可以更新答案 ------------------------------------------------ ...

  9. 1295: [SCOI2009]最长距离

    1295: [SCOI2009]最长距离 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 960  Solved: 498[Submit][Status ...

随机推荐

  1. JetbrainsCrack

    http://blog.csdn.net/lcyong_/article/details/61205672 http://blog.csdn.net/nn_jbrs/article/details/7 ...

  2. windows下mysql 5.7的配置全过程

    这是一套在好多次的安装下总结出来的经验,包括很多种遇到的问题,查过很多资料,特此总结一下. 一.从官网下载MySQL的zip(免安装的) 解压mysql-5.7.11-winx64.zip到自己指定的 ...

  3. JS高级技巧(简洁版)

    高级函数 由于在JS中,所有的函数都是对象,所以使用函数指针十分简单,也是这些东西使JS函数有趣且强大 安全的类型检测 JS内置的类型检测机制并不是完全可靠的 typeof 操作符返回一个字符串,表示 ...

  4. [bzoj1208][HNOI2004]宠物收养所——splay

    题目大意 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的宠物,阿Q根据领养者的要求通过他自己发 ...

  5. STL各个数据结构特点

    STL容器特征总结 2011-11-09 11:10:50|  分类: STL|举报|字号 订阅     STL中顺序容器类和关联式容器类的主要特征如下:(1)Vector 1.内部数据结构:连续存储 ...

  6. 四维偏序(K-D-Tree+rebuild)

    其实只是放个代码,会K-D-Tree的同学看了就知道怎么rebuild了,其实也是很简单粗暴的…… 单独再发一次吧,感觉把代码跟之前的一起发不知道啥时候就找不到了…… #include<bits ...

  7. springboot 整合jdbcTemplate

    springboot 整合jdbcTemplate 〇.搭建springboot环境(包括数据库的依赖) 一.添加依赖 如果导入了jpa的依赖,就不用导入jdbctemplete的依赖了jpa的依赖: ...

  8. 【LVS 】NAT方式实现过程

    LVS-NAT方式实现负载均衡 一.环境介绍

  9. js实现双指缩放图片 手机端双指缩放图片

    首先引入js文件,需要jq,pinchzoom.js.pinchzoom.js需要在jq环境下使用,可以 <meta name="viewport" content=&quo ...

  10. python中的yield生成器详解

    #原创,转载请先联系 在学习生成器之前,必须先了解一下迭代器.因为生成器就是一种特殊的迭代器,而且生成器用起来更加优雅. 迭代器的详解可以参考我的另一篇博文:https://www.cnblogs.c ...