博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dijkstra
阅读量:5057 次
发布时间:2019-06-12

本文共 1446 字,大约阅读时间需要 4 分钟。

题目已经写的很清楚是最短路问题了,但是这是一个考几何的最短路emmm,所以我把他放来综合题。

题意:给出两条平行线跟n个圆,然后在圆上走跟在线上走不消耗体力,求L1到L2的最短路

首先写这道题需要反复用这两个公式

平行线距离公式

 

我们很容易就能想到把整个圆看成一个点,然后去做最短路,那么我们就要加一个源点跟汇点,源点为L1,汇点为L2

 

然后枚举算出所有圆到源点跟汇点的距离。再枚举算出在圆与圆之间的最短路。

然后就可以开始我们愉快的dijstra了

代码如下:

#include 
using namespace std;#define ll long long#define re register#define P pair
#define mp make_pair#define pb push_back#define fi first#define se secondconst int N=1e6+10;const int mod=19260817;void read(int &a){ a=0; int d=1; char ch; while(ch=getchar(),ch>'9'||ch<'0') if(ch=='-') d=-1; a=ch-'0'; while(ch=getchar(),ch>='0'&&ch<='9') a=a*10+ch-'0'; a*=d;}void write(int x){ if(x<0) putchar(45),x=-x; if(x>9) write(x/10); putchar(x%10+'0');}struct note{ int pos; double dis; bool operator < (const note &x) const { return x.dis
q;inline void dijstra(int st){ memset(dis,126,sizeof(dis)); dis[st]=0.0; q.push({st,0.0}); while(!q.empty()) { note x=q.top(); q.pop(); if(vis[x.pos]) continue; vis[x.pos]=1; for(re int i=0;i
x.dis+l[x.pos][i]) dis[i]=x.dis+l[x.pos][i],q.push({i,dis[i]}); } }}int main(){ int A,B,C1,C2; read(n); read(A); read(B); read(C1); read(C2); for(re int i=0;i

 

转载于:https://www.cnblogs.com/acm1ruoji/p/10726167.html

你可能感兴趣的文章
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>
设计器 和后台代码的转换 快捷键
查看>>
在线视频播放软件
查看>>
用代码生成器生成的DAL数据访问操作类 基本满足需求了
查看>>
28初识线程
查看>>
Monkey测试结果分析
查看>>
Sublime Text 3 设置
查看>>
浅谈C++底层机制
查看>>
STL——配接器、常用算法使用
查看>>
第9课 uart
查看>>
Range和xrange的区别
查看>>
BZOJ 1010 [HNOI2008]玩具装箱 (斜率优化DP)
查看>>
java-动态规划算法学习笔记
查看>>
STL容器之vector
查看>>
Linux 内核中断内幕
查看>>
DNS负载均衡
查看>>
无法向会话状态服务器发出会话状态请求
查看>>
数据中心虚拟化技术
查看>>