总体思路:离散化 + 建图 + 单源最短路
(看见人少蒟蒻才敢发题解QAQ)


需要注意的是:

  1. 考虑到w范围较大,而实际虫洞数量较小,就只记录虫洞的起点与终点来建图。
  2. 建图时,虫洞起点可以去重。
  3. 在建图时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 虫洞的更多相关文章

  1. P2620 虫洞

    题目背景 applepi 想进行宇宙旅行.当然,applepi 知道这是有可能的,因为applepi 的特殊能力能使他观测到宇宙中的虫洞.所谓虫洞就是一个在三维之外的维度打开的快捷通道,通过虫洞能够从 ...

  2. POJ 3259 Wormholes 最短路+负环

    原题链接:http://poj.org/problem?id=3259 题意 有个很厉害的农民,它可以穿越虫洞去他的农场,当然他也可以通过道路,虫洞都是单向的,道路都是双向的,道路会花时间,虫洞会倒退 ...

  3. 五一 DAY 7

    五一  DAY 7 P1514 引水入城 P1311 选择客栈 题解: P1315 观光公交 题解: 设 wait i 为最晚到达的旅客 arrive i 为到达i 的时刻 arrive i =max ...

  4. 洛谷 P2850 [USACO06DEC]虫洞Wormholes 题解

    P2850 [USACO06DEC]虫洞Wormholes 题目描述 While exploring his many farms, Farmer John has discovered a numb ...

  5. BZOJ 1715: [Usaco2006 Dec]Wormholes 虫洞

    Description John在他的农场中闲逛时发现了许多虫洞.虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之前).John的每个农场有M条小路(无向边)连接着N ...

  6. BZOJ1715: [Usaco2006 Dec]Wormholes 虫洞

    1715: [Usaco2006 Dec]Wormholes 虫洞 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 475  Solved: 263[Sub ...

  7. 1715: [Usaco2006 Dec]Wormholes 虫洞

    1715: [Usaco2006 Dec]Wormholes 虫洞 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 501  Solved: 278[Sub ...

  8. bzoj usaco 金组水题题解(1)

    UPD:我真不是想骗访问量TAT..一开始没注意总长度写着写着网页崩了王仓(其实中午的时候就时常开始卡了= =)....损失了2h(幸好长一点的都单独开了一篇)....吓得赶紧分成两坨....TAT. ...

  9. 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&& ...

随机推荐

  1. python 字典元组集合字符串

    s1 = ''hello, world!'' s2 = '\n\hello, world!\\n' print(s1, s2, end='') s1 = '\141\142\143\x61\x62\x ...

  2. Roma - Facebook工具链大一统

    什么是roma roma,中文名罗马,是Facebook的rn团队的产出,是一个试验性质的javascript工具链,集编译,linter,格式化,打包,测试等等于一体.目标是成为一个处理javasc ...

  3. 浅析SIEM、态势感知平台、安全运营中心

    近年来SIEM.态势感知平台.安全运营中心等概念炒的火热,有的人认为这都是安全管理产品,这些产品就是一回事,有人认为还是有所区分.那么到底什么是SIEM.什么是态势感知平台.什么是安全运营中心,他们之 ...

  4. 分享一次C#调用Delphi编写Dll程序

    1.前言: 最近接手了一个项目需要和Delphi语言编写的一个系统进行一些接口的对接,数据在传输过程中采用Des加密方式,因为Delphi 平台的加密方式和C#平台的加密方式不互通,所以采用的方式是C ...

  5. 第四篇(1):企业常用Linux web环境安装配置(apache、php、mysql)

    上篇我们讲了基本的软件包管理和文件操作什么的,现在也要动手安装点有用的东西了吧! 本篇我会写出一个用yum安装apache.php.mysql的方法,最后再运行phpMyAdmin来管理数据库. 1. ...

  6. 深入理解 vertical-align 属性

    语法 用来指定行内元素或表格元素的垂直对齐方式 相对父元素的值 baseline 使元素的基线与父元素的基线对齐.HTML规范没有详细说明部分可替换元素的基线,如textarea,这意味着这些元素使用 ...

  7. 大数据学习之scala-环境搭建

    scala 下载网站 https://www.scala-lang.org/download/ 安装scala要先安装java,并且配置java环境,官网也有说明 不过国内的网站下载不下来可以访问:  ...

  8. 你知道吗,Flutter内置了10多种Button控件

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 Flutter内置了10多种Button(按钮)类控件供我 ...

  9. Django_orm

    Object Relational Mapping(ORM) ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据 ...

  10. 【Python】2.12学习笔记 变量

    变量 关于变量我有一个不能理解的,关于全局变量作用域与地址的问题,学函数的时候我可能会搞懂它并且写下来 另外,其实昨天说的是有些不准确的,\(Python\)里的变量不是不用声明类型,只是声明方式特殊 ...