【题目描述】:
图图计划去Bzeroth 的精灵王国去旅游,精灵王国由n 座城市组成,第i 座城市有3 个属性x[i],w[i],t[i]。在精灵王国的城市之间穿行只能依靠传送阵,第i 座城市的传送阵可以将图图从城市i 传送到距离城市i 不超过w[i]的任意一个城市,并需要t[i]的时间完成传送。现在图图知道了每个城市的坐标x[i],想知道他从城市s 到城市t 的最小时间。这么难的问题图图当然不会做了,他想让你帮帮他,你能解决这个问题吗?【输入描述】:
第一行包含3 个正整数n、s、t,表示城市个数,起点城市和终点城市。第二行包含n 个整数x[i],表示第i 座城市的坐标。第三行包含n 个整数w[i],表示第i 座城市的传送距离。第四行包含n 个整数t[i],表示第i 座城市的传送时间。【输出描述】:
请输出从城市s 到城市t 的最小时间,保证至少存在一组合法解。【样例输入】:
7 3 7
-1 0 1 2 3 5 10
11 0 1 1 4 10 2
3 1 1 1 2 4 5
【样例输出】:
7
【样例说明】:
路线为3 → 4 → 5 → 1 → 7,时间之和为7。【时间限制、数据范围及描述】:
时间:1s 空间:256M对于30%的数据,1≤n≤2501,所有的t[i]均相等。对于60%的数据,1≤n≤2501。对于100%的数据,1≤n≤152501,0≤w[i],t[i],|x[i]|≤10^9,保证x[i]严格递增。本题的关键是要看出每个点所能到达的点是一个区间,所以直接用线段树的思想来建边,每次只要将一个点连上它所对应的区间即可.
然后线段树内部就父亲连向儿子,这样点数虽增多了,但是边数却减少为nlogn,最后再跑一边dijkstra就行了.Code:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<ctime>
using namespace std;
const int N=1000005;
int n,cnt,head[N*4],X[N],D[N],T[N],wl[N],wr[N];
long long dis[N*4];
bool vis[N*4];
struct Node{int v,nxt,w;
}edge[N*8];
struct node{int u;long long d;
};
bool operator<(const node &p,const node &q){return p.d>q.d;
}
priority_queue<node> q;
void add(int u,int v,int w){cnt++;edge[cnt].v=v;edge[cnt].w=w;edge[cnt].nxt=head[u];head[u]=cnt;
}
void build(int o,int l,int r){if (l==r){add(o+n,l,0);return;}int mid=(l+r)>>1;build(o<<1,l,mid);build(o<<1|1,mid+1,r);add(o+n,(o<<1)+n,0);add(o+n,(o<<1|1)+n,0);
}
void update(int o,int l,int r,int u,int ql,int qr,int w){if (l>=ql && r<=qr){add(u,o+n,w);return;}int mid=(l+r)>>1;if (ql<=mid){update(o<<1,l,mid,u,ql,qr,w);}if (qr>=mid+1){update(o<<1|1,mid+1,r,u,ql,qr,w);}
}
void dijkstra(int s){for(int i=1;i<N*4;i++){dis[i]=1e18;}dis[s]=0;q.push((node){s,0});while (!q.empty()){int u=q.top().u;q.pop();if (vis[u]){continue;}vis[u]=1;for (int i=head[u];i;i=edge[i].nxt){int v=edge[i].v;if (dis[v]>dis[u]+edge[i].w){dis[v]=dis[u]+edge[i].w;if (!vis[v]){q.push((node){v,dis[v]});}}}}
}
int main(){int s,t;scanf("%d%d%d",&n,&s,&t);for(int i=1;i<=n;i++){scanf("%d",&X[i]);}for(int i=1;i<=n;i++){scanf("%d",&D[i]);}for(int i=1;i<=n;i++){scanf("%d",&T[i]);}build(1,1,n);for (int i=1;i<=n;i++){wl[i]=lower_bound(X+1,X+1+n,X[i]-D[i])-X;wr[i]=upper_bound(X+1,X+1+n,X[i]+D[i])-X-1;}for (int i=1;i<=n;i++){update(1,1,n,i,wl[i],wr[i],T[i]);}dijkstra(s);printf("%lld\n",dis[t]);return 0;
}

转载于:https://www.cnblogs.com/ukcxrtjr/p/11556592.html

UOJ #588. 图图的旅行相关推荐

  1. 十一长假去旅行,不知如何规划?三个步骤,用思维导图来规划旅行路线

    编辑by脆脆鲨 十一假期,有不少小伙伴计划出门旅游,给自己来好好放个假.旅游如果自由行的话,建议还是要提前做一下规划,提前知道要参观的景点的路线和开放时间等.如何来做旅行规划呢?今天小编就教大家如何做 ...

  2. UOJ #589. 图图的游戏

    [题目描述]: 图图正在玩一个智力游戏:有一个n×n 的01 方格,图图要从中选出一个面积最大的矩形区域,要求这个矩形区域不能有超过k个1. 这么难的问题图图当然不会做了,他想让你帮帮他,你能解决这个 ...

  3. 世界上有没有无法破解的密码?揭秘量子通信 | 图图是道

    来源:文章2020年11月23日发表于<中国日报>的微信公众号 图图是道 科学顾问 / 中国科学技术大学副教授 袁岚峰 监制 / 柯荣谊   联合监制 / 邢志刚   统筹 / 张若琼 总 ...

  4. #589. 图图的游戏

    [题目描述]: 图图正在玩一个智力游戏:有一个n×n 的01 方格,图图要从中选出一个面积最大的矩形区域,要求这个矩形区域不能有超过k个1.这么难的问题图图当然不会做了,他想让你帮帮他,你能解决这个问 ...

  5. HTML静态网页作业——图图影视影院5页 带报告

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 摄影作品 | 影视设计网页 | 在线电影 | 视频音频元素 | ...

  6. 数据结构(廿五) -- C语言版 -- 图 - 图的遍历 -- 邻接矩阵 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.概 述 二.深度优先遍历(DFS) 2.1.无向图的遍历过程 2.2.有向图的遍历过程 2.3.总结说明 2.4.实现源代码 三.广度优先遍历(BFS) 3.1.广度优先的 ...

  7. 系统分析与设计作业(五):业务建模与活动图图绘制

    系统分析与设计作业(五):业务建模与活动图图绘制 题目 题目 1. 根据订旅馆建模文档,Asg-RH.pdf: 绘制用例图模型(到子用例) 给出 make reservation 用例的活动图 2.根 ...

  8. NeurIPS 2022 | 能量函数指导的图图翻译扩散模型

    EGSDE 扩散模型作为一种新的深度生成模型,在图像生成领域取得了 SOTA 的效果,并且逐渐在诸多应用领域展现出强大的性能,如视频生成.分子图建模等. 最近来自人民大学李崇轩课题组的研究者们提出了一 ...

  9. 数据结构(廿六) -- C语言版 -- 图 - 图的遍历 -- 邻接表 - 深度/广度优先遍历/搜索(DFS、BFS)

    内容预览 零.读前说明 一.深度优先遍历 1.1.深度优先的遍历过程 1.2.深度优先的遍历实现代码 二.广度优先遍历 2.1.广度优先的遍历过程 2.2.广度优先的遍历实现代码 三.源码测试效果 3 ...

最新文章

  1. 浅析Hyperledger Fabric共识算法
  2. C++基础知识之vector
  3. 游戏编程设计模式-state
  4. Educational Codeforces Round 80 (Rated for Div. 2) E. Messenger Simulator 思维 + 树状数组
  5. emacs php 配置文件,如何配置emacs进行正确的PHP开发?
  6. 08-04 性能测试--复杂情景设计
  7. FTP的上传下载工具类
  8. clickhouse创建数据库以及表
  9. karto探秘之open_karto 第一章 --- 数据结构与类的初始化
  10. Navicat Premium 12安装过程
  11. Flask 蓝图(Blueprint)
  12. 营销管理手册_从店长手册入手,推动营销管理大升级
  13. Mysql实战练习之简单图书管理系统
  14. 数字信号处理及其MATLAB实现总结
  15. c语言谱曲软件,基于C语言的音乐谱曲技巧与应用研究
  16. lcx端口转发linux_技术干货 | 内网渗透之代理转发
  17. MFC学习之路(五)让人菊花一紧的错误
  18. android 验证手机、邮箱格式
  19. vue标签上自定义动态背景图片
  20. 基于Java的GUI界面+SQL Server数据库课程信息管理系统

热门文章

  1. Android开发入门解答
  2. 走出海量数据及访问量压力困境收藏[转]
  3. 第六课:不要为金钱而工作
  4. LayaBox IDE 安装后执行项目报错解决方案的一些记录
  5. 2017-3-10 SQL server 数据库 T--SQL语句
  6. Linux压缩解压缩命令
  7. [转载] 杜拉拉升职记——20 两位同僚
  8. 共享一PYTHON 相关应用领域的介绍资料
  9. android studio 以源码形式导入volley作为library,SDK的目录结构
  10. android handle显示加载框