Rush Hour 2

题目大意

给定一张无向图,边带两个参数 \(c_i,d_i\),在 \(t\) 时间时经过第 \(i\) 条边所需的时间是 \(c_i+\lfloor\frac{d_i}{t+1}\rfloor\),求在时间 \(0\) 时出发,在每个点可以停留非负整数时间,从点 \(1\) 到点 \(n\) 所需的最短时间。

思路分析

首先,容易发现在时间 \(t\) 时经过第 \(i\) 条边后的总时间是:\(t+c_i+\lfloor\frac{d_i}{t+1}\rfloor\)。

那么不妨设函数 \(f(t)=t+c_i+\lfloor\frac{d_i}{t+1}\rfloor\),由均值不等式容易得 \(f(t)_{\min}=f(\sqrt{d_i}-1)\)。

也就是说,当我们想经过某一条边时,如果当前时间大于 \(\sqrt {d_i}-1\),那么不用等待直接通过,否则等到 \(\sqrt{d_i}-1\) 时再通过。

那么就可以使用普通的 Dijkstra 解决了。

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue> using namespace std;
#define int long long
const int N=200100; int n,m,idx=1,in1,in2,in3,in4;
int to[N],nxt[N],head[N];
int fa[N],vis[N];
int dis[N],c[N],d[N]; int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);} void add(int u,int v,int x,int y){
idx++;to[idx]=v;nxt[idx]=head[u];head[u]=idx;c[idx]=x;d[idx]=y;
} struct Node{
int x,time;
bool operator < (const Node &b) const{
return time>b.time;
}
}now; priority_queue <Node> q; void Dijkstra(){
memset(dis,0x3f,sizeof dis);
dis[1]=0;q.push(Node{1,0});
while(!q.empty()){
now=q.top();q.pop();
if(vis[now.x]) continue;
vis[now.x]=1;
for(int i=head[now.x];i;i=nxt[i]){
int v=to[i],t;
if(now.time<=round(sqrt(d[i]))-1) t=round(sqrt(d[i]))-1;
else t=now.time; //判断通过时间
if(dis[v]>t+c[i]+d[i]/(t+1)){
dis[v]=t+c[i]+d[i]/(t+1);
q.push(Node{v,dis[v]});
}
}
}
} signed main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++) fa[i]=i;
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld%lld",&in1,&in2,&in3,&in4);
add(in1,in2,in3,in4);add(in2,in1,in3,in4);
fa[find(in1)]=find(in2);
}
if(find(1)!=find(n)){cout<<"-1\n";return 0;}//并查集判连通
Dijkstra();
cout<<dis[n]<<'\n';
return 0;
}

[ABC204E] Rush Hour 2 题解的更多相关文章

  1. Codeforces Round #102 (Div. 2) 题解

    A. 解一个方程. 还是厚颜无耻地暴力吧~ #include <iostream> using namespace std; int r1, r2, c1, c2, d1, d2; boo ...

  2. 【第400篇题解纪念2016年10月28日】【28.10%】【codeforces 617E】XOR and Favorite Number

    time limit per test4 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  3. 【NOI 2019】同步赛 / 题解 / 感想

    非常颓写不动题怎么办…… 写下这篇博客警示自己吧…… 游记 7.16 我并不在广二参加 NOI,而是在距离广二体育馆一公里远的包间打同步赛(其实就是给写不动题找个理由) 上午身体不舒服,鸽了半天才看题 ...

  4. Codeforces Round #624 (Div. 3) F. Moving Points 题解

    第一次写博客 ,请多指教! 翻了翻前面的题解发现都是用树状数组来做,这里更新一个 线段树+离散化的做法: 其实这道题是没有必要用线段树的,树状数组就能够解决.但是个人感觉把线段树用熟了会比树状数组更有 ...

  5. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  6. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  7. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  8. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  9. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  10. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

随机推荐

  1. 西门子S7系列PLC以太网通讯处理器编程调试方法

    捷米特(北京)科技有限公司研发的捷米特以太网通讯模块,转以太网通讯模块型号有ETH-S7200-JM01和ETH-S7300-JM01,适用于西门子S7-200/S7-300/S7-400.SMART ...

  2. Flutter upgrade 卡死问题

    使用 到本地的flutter sdk的目录下 $flutter upgrade --force 降低到指定版本 : $flutter version 1.22.4

  3. jar包、war包项目部署

    部署 部署 jar包 部署 war包 部署 jar包 环境准备 JDK Tomcat Linux 环境 1.将jar文件上传至服务器 2.编写脚本 启动脚本放在跟jar 一起的路径下,如果不放在同一路 ...

  4. 使用官方推荐的库来测react hook组件

    最近写单元测试的时候遇见了一些问题,当我使用使用jest测React. useRef,  React. useEffect时,总是测不到, 然后我去查阅了一下官方文档,它推荐了使用下面这个库 @tes ...

  5. 投个 3D 冰壶,上班玩一玩

    ​本篇文章将介绍如何使用物理引擎和图扑 3D 可视化技术来呈现冰壶运动的模拟. Oimo.js 物理引擎 Oimo.js 是一个轻量级的物理引擎,它使用 JavaScript 语言编写,并且基于 Oi ...

  6. 论文翻译: FREEVC:朝着高质量、无文本、单次转换声音的目标迈进

    原文:FREEVC: TOWARDS HIGH-QUALITY TEXT-FREE ONE-SHOT VOICE CONVERSION 原文地址:https://ieeexplore.ieee.org ...

  7. Linux 日志服务管理

    日志管理 1 系统日志管理 1 rsyslog系统日志服务 日志记录的内容包括: 历史事件:时间,地点,人物,事件 Jul 18 14:30:53 # 时间 ubuntu2204 # 地点 (在哪个主 ...

  8. 发布关于PostGIS对于USD格式的拓展

    我们非常高兴的发布为了一年一度的SIGGRAPH 2023发布关于为PostGIS支持USD格式的新拓展. 新添加了3个函数 ST_AsUSDA(geom geometry, usd_root_nam ...

  9. 一些不错的VSCode设置和插件

    设置 同步设置 我们做的各项设置,不希望再到其他机器的时候还得再重新配置一次.VSCode中我们可以登陆微软账号或者GitHub账号,登陆后我们可以开启同步设置.开启设置同步,根据提示登陆即可. 允许 ...

  10. CentOS系统修改yum源

    看了一下自己之前写的文章,写的那叫一个垃圾.无地自容.作为一个菜鸡.现在不妨在博客上记录一下自己学习的记录,同时发表出来,也算作是对自己的勉励. 吾辈不孤,吾道不寡,诸君加油! 下面进入正题: Cen ...