题解 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&& ...
随机推荐
- web博客
欢迎大家来戳一戳
- 统计 Django 项目的测试覆盖率
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 我们完成了对 blog 应用和 comment 应用这两个核心 app 的测试.现在 ...
- Linux-基本操作(登入登出,图形化界面,命令行界面)
命令行界面登录 (1)命令行登录界面 安装好Centos后,系统启动默认进入的是图形化界面,可以通过如下命令修改进入命令行界面: 命令行登录:systemctl set-default multi ...
- SPA中前端路由基本原理与实现方式
SPA 前端路由原理与实现方式 通常 SPA 中前端路由有2中实现方式,本文会简单快速总结这两种方法及其实现: 修改 url 中 Hash 利用 H5 中的 history Hash 我们都知道 ur ...
- 日常破解---XCTF_APP1获取flag记录
日常破解---XCTF_APP1获取flag记录 一.题目来源 来源:XCTF社区安卓题目app1 二.解题记录 1.首先安装到模拟器中运行一下,如下图所示,点击一下按钮,弹出提示年轻人不 ...
- python打包py为exe程序:PyInstaller
打包库:PyInstaller python程序编写过程中的脚本文件为py格式的文件,当我们想将编写好的程序移植到其他机器上给其他人使用时,如果目标机器没有安装python环境,py文件将无法运行,而 ...
- 操作系统-schedule函数
1. Linux 0.11的调度函数schedule() 也就是找到了counter最大的进程,然后就跳出去执行switch_to,对应上面的优先级算法,而counter本身也是时间片,也作了轮转调度 ...
- Azure CLI 简单入门
Azure CLI 是什么 Azure 命令行接口 (CLI) 是用于管理 Azure 资源的 Microsoft 跨平台命令行体验. Azure CLI 易于学习,是构建适用于 Azure 资源的自 ...
- 数据挖掘入门系列教程(四点五)之Apriori算法
目录 数据挖掘入门系列教程(四点五)之Apriori算法 频繁(项集)数据的评判标准 Apriori 算法流程 结尾 数据挖掘入门系列教程(四点五)之Apriori算法 Apriori(先验)算法关联 ...
- 如何让antd的Modal组件的确认和取消不显示(或自定义按钮)(转载)
使用Modal中的footer属性,如下: <Modal title="更改成员" visible={visible} confirmLoading={confirmLoad ...