【spfa】bzoj1295 [SCOI2009]最长距离
题意:给你一个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]最长距离的更多相关文章
- [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< ...
- 题解 [BZOJ1295][SCOI2009] 最长距离
题面 解析 \(n\)只有\(30\)可以直接枚举每个矩形, 判断他们的左上角到右下角或右上角到左上角的最短路是否小于\(T\). 最短路可以用\(dijkstra\). 一开始想用\(DP\)写最短 ...
- 【BZOJ1295】[SCOI2009]最长距离(最短路)
[BZOJ1295][SCOI2009]最长距离(最短路) 题面 BZOJ 洛谷 题解 这题很妙啊. 我们枚举一个点,只需要考虑到他的最远点就行了,显然只需要考虑一个点即可.那么这两个点之前联通的最小 ...
- BZOJ 1295: [SCOI2009]最长距离 spfa
1295: [SCOI2009]最长距离 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=1295 Description windy有一块 ...
- bzoj 1295: [SCOI2009]最长距离
题目链接 1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1165 Solved: 619[Submit][ ...
- BZOJ 1295: [SCOI2009]最长距离( 最短路 )
把障碍点看做点(边)权为1, 其他为0. 对于每个点跑spfa, 然后和它距离在T以内的就可以更新答案 ------------------------------------------------ ...
- 1295: [SCOI2009]最长距离
1295: [SCOI2009]最长距离 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 960 Solved: 498[Submit][Status ...
随机推荐
- 利用WebStorm来管理你的Github
什么是Github Github是一个共享虚拟主机服务,用于存放使用Git版本控制的软件代码和内容项目,以最简单的方式来说,其实就是一个代码库,上面有全世界无数优秀的码农上传自己的作品和大家共享(当然 ...
- gitlab迁移升级
一.迁移步骤 1.首先安装最新版本gitlab(gitlab7.2安装) 2.停止旧版本gitlab服务 3.将旧的项目文件完整导入新的gitlab bundle exec rake gitlab:i ...
- Vue项目中引入外部文件(css、js、less)
例子中css文件采用bootstrap.css,js文件采用jQuery,less文件用less.less(自定义文件) 步骤一:安装webpack cnpm install webpack -g 步 ...
- 图论:Gale-Shapley算法
Gale-Shapley算法又叫做延迟认可算法,它可以解决这么一个问题 一共有N位男士和N位女士 每位男士对每位女士都有一个好感度,让他们结合成为N对夫妻,要求男士优先表白,最后问结合情况 第一轮,每 ...
- IpmiTool常见问题解决办法
IpmiTool常见问题解决办法 http://blog.csdn.net/c9h8o4/article/details/17138029 关于IPMI的几个问题 http://blog.csdn.n ...
- 查看Linux上的CPU核心数、线程数
grep "physical id" /proc/cpuinfo|sort -u grep "cpu cores" /proc/cpuinfo|uniq gre ...
- JS:body元素对象的clientWidth、offsetWidth、scrollWidth、clientLeft、offsetLeft、scrollLeft
document.body.clientWidth 获取body元素对象的内容可视区域的宽度,即clientWidth=width+padding,不包括滚动条. document.body.clie ...
- word-wrap
平时的网页制作中碰到过这样的情况,比如说在blog中制作了一个完美而且又靓丽的评论布局,让你的用户浏览网页是可以给你添加评论,但当有人发布了一个原始网址或者其它超长的文本时,你此时的布局就被他们给彻底 ...
- MatserDetail自动展开
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windo ...
- 快速搭建YUM源和yum使用
yum是一种便捷,快速的RPM包安装方法,可以避免很多包的关联性,但RedHat的YUM源,不是免费的,需要他们的RHN才能够用,而CentOS得yum是免费的,由于CentOS和RedHat相似度高 ...