题解 P2620 虫洞
总体思路:离散化 + 建图 + 单源最短路
(看见人少蒟蒻才敢发题解QAQ)
需要注意的是:
- 考虑到w范围较大,而实际虫洞数量较小,就只记录虫洞的起点与终点来建图。
- 建图时,虫洞起点可以去重。
- 在建图时b、e两点的距离并不一定为(e-b+s-1)/s。比如当我从0处走到6处,限定步数为3时,理论上是走2步,但如果3处有虫洞无法停留,则只能0->2->5->6走4步。
#include <bits/stdc++.h>
#define r(x) scanf("%d",&x)
const int I=;
using namespace std;
set<int>s;//去重
int w,st,p,c;
int l[I*],x[I],y[I];//l[]为离散化数组,x[]为虫洞起点,y[]为虫洞终点
int d[I*][I*];
int F(int b,int e){//求解两点间距离
if(b==e)return ;
if(s.count(b))return 0x3fffffff;
int k=e;
for(int i=;i<=p;i++)
if(b<x[i]&&x[i]<k&&(x[i]-b)%st==)k=x[i];//查找第一个落脚点
while(k!=e&&s.count(k))k--;
if(k==b)return 0x3fffffff;
return F(k,e)+(k-b+st-)/st;
}
int Q(int x) {//由原点找离散化后的点
return lower_bound(l+,l+c+,x)-l;
}
void Floyd(){//求解最短路
for(int k=;k<=c;k++)
for(int i=;i<=c;i++)
for(int j=;j<=c;j++)
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
int main(){
r(w);
while(w!=){
r(st);r(p);
s.clear();
memset(l,,sizeof l);
memset(x,,sizeof x);
memset(y,,sizeof y);
c=;
l[++c]=;l[++c]=w;
for(int i=;i<=p;i++)
r(x[i]),r(y[i]),s.insert(x[i]),l[++c]=x[i],l[++c]=y[i];
sort(l+,l+c+);
c=unique(l+,l+c+)-l-;
memset(d,0x3f,sizeof d);
for(int i=;i<=p;i++)
d[Q(x[i])][Q(y[i])]=;//虫洞起终点距离为0
for(int i=;i<c;i++)
for(int j=i+;j<=c;j++)
d[i][j]=min(d[i][j],F(l[i],l[j]));//初始化
Floyd();
cout<<d[][c]<<endl;
r(w);
}
return ;
}
题解 P2620 虫洞的更多相关文章
- P2620 虫洞
题目背景 applepi 想进行宇宙旅行.当然,applepi 知道这是有可能的,因为applepi 的特殊能力能使他观测到宇宙中的虫洞.所谓虫洞就是一个在三维之外的维度打开的快捷通道,通过虫洞能够从 ...
- POJ 3259 Wormholes 最短路+负环
原题链接:http://poj.org/problem?id=3259 题意 有个很厉害的农民,它可以穿越虫洞去他的农场,当然他也可以通过道路,虫洞都是单向的,道路都是双向的,道路会花时间,虫洞会倒退 ...
- 五一 DAY 7
五一 DAY 7 P1514 引水入城 P1311 选择客栈 题解: P1315 观光公交 题解: 设 wait i 为最晚到达的旅客 arrive i 为到达i 的时刻 arrive i =max ...
- 洛谷 P2850 [USACO06DEC]虫洞Wormholes 题解
P2850 [USACO06DEC]虫洞Wormholes 题目描述 While exploring his many farms, Farmer John has discovered a numb ...
- BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞
Description John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N ...
- BZOJ1715: [Usaco2006 Dec]Wormholes 虫洞
1715: [Usaco2006 Dec]Wormholes 虫洞 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 475 Solved: 263[Sub ...
- 1715: [Usaco2006 Dec]Wormholes 虫洞
1715: [Usaco2006 Dec]Wormholes 虫洞 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 501 Solved: 278[Sub ...
- bzoj usaco 金组水题题解(1)
UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...
- USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...
随机推荐
- 如何用Postman做接口自动化测试
目录 前言 什么是自动化测试 自动测试测试分类 为什么需要自动化测试 Postman自动化测试演示 1.新建集合 2.新建接口 3.填写自动化测试脚本 4.录入所有接口 5.执行自动化测试 前言 什么 ...
- HTML常用标签的使用
一.常见标签详解 1.<iframe>标签 HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中.在HTML 4.01中,文 ...
- Python读取和写入文件
1 从文件中读取数据 1.1 读取整个文件 创建名为test的txt文本文件,添加内容如下所示: 123456789023456789013456789012 实现代码: with open('tes ...
- 解决Sprite Atlas打包Asset bundles时重复打包的问题
0x00 前言 在Unity 2018.4.6之前的版本,有一个和SpriteAtlas打AB包有关的常见问题.即当给Sprite Atlas打AB包时,Sprite Atlas Texture可能会 ...
- Map - 与君初相识
前言 生活中,我们常会看到这样一种集合:IP地址与主机名,身份证号与个人等,这种一 一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种对应关系的对象,即 java.util.Map 接口 ...
- 移值 RTL8188EUS linux4.1.36 驱动
网卡为COMFAST CF-WU720N RTL8188EUSVID 0x0bdaPIV 0x8179 驱动下载网址是http://www.comfast.cn/download/qdcx/item- ...
- Design Patterns | 02 什么样的代码是好代码
目录 01 - 什么是好的代码? 02 - 评价代码的标准有哪些 2.1 可维护性(maintainability) 2.2 可读性(readability) 2.3 可扩展性(extensibili ...
- JSON Serialization/Deserialization in C#
因为对C#不是特别熟悉,但是最近写个c#的demo,需要对获取的的json字符串进行解析,开始使用Newtonsoft.Json.Linq尝试了以下,但是感觉操作起来比较麻烦,尤其对与JSON结构比较 ...
- ajax3
json json:JavaScript对象表示方法(JavaScript object notation) json:是存储和交换文本信息的语法,类似与xml.他使用键值对的方式来组织,易于人们阅读 ...
- Clipboard.SetText()卡住问题
调用 Clipboard.SetText(),每次都抛出异常:"CLIPBRD_E_CANT_OPEN" 调查后发现,实际上SetText有成功的将文本复制到Clipboard,但 ...