【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 ...
随机推荐
- codeforces803D. Magazine Ad
D. Magazine Adtime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutput ...
- python 一些乱七八糟的东西
import random import os import sys import re class _is: def __init__(self,reg): self.cr=re.compile(r ...
- Error in deleting blocks.
2014-08-24 22:15:21,714 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Error processing datan ...
- nginx,docker反向代理
1. [root@javanginx ~]# cat /etc/nginx/nginx.conf user root root;worker_processes 4;error_log /var/lo ...
- Awk basic and practice
定义:Awk是一种程序语言,用来处理数据和产生报告.数据可来自标准输入,文件,管道输出. 格式:#awk '/pattern/ {action}' filename 术语:pattern, 样式是由正 ...
- 修复ios上第三方输入法弹出时输入键盘盖住网页没有进行相应滚动从而盖住表单输入框的问题
fixIME(); function fixIME(){ scroll_y = 100; // 如果键盘弹起后 网页window对象的卷起小于此值,说明没有自动卷起 单位:px timer = 50 ...
- codefoeces problem 671D——贪心+启发式合并+平衡树
D. Roads in Yusland Mayor of Yusland just won the lottery and decided to spent money on something go ...
- bzoj 1996 DP
我们可以发现,对于最后队列的一段区间[i,j],不论这一段区间如何插入,除了最后一个插入的对象外,剩下的对后续插入没有影响,这启发我们可以用DP来解决这一问题. w[i][j][0..1]代表区间[i ...
- [Leetcode Week2]Merge Intervals
Merge Intervals题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/merge-intervals/description/ Descript ...
- doxygen使用
前言 下面主要讲解linux下Doxygen命令行实现html文档生成的操作,当然也有界面版本操作方式,linux下安装doxygen-gui即可通过doxywizard开启界面操作,windows下 ...