#P2078. [NOI2019] 回家路线

题目描述

猫国的铁路系统中有 nn 个站点,从 1 - n1−n 编号。小猫准备从 11 号站点出发,乘坐列车回到猫窝所在的 nn 号站点。它查询了能够乘坐的列车,这些列车共 mm 班,从1 - m1−m编号。小猫将在 00 时刻到达 11 号站点。对于 ii 号列车,它将在时刻 p_ipi​ 从站点 x_ixi​ 出发,在时刻 q_iqi​ 直达站点 y_iyi​,小猫只能在时刻 p_ipi​ 上 ii 号列车,也只能在时刻 q_iqi​ 下 ii 号列车。小猫可以通过多次换乘到达 nn 号站点。一次换乘是指对于两班列车,假设分别为 uu号与 vv 号列车,若 y_u = x_vyu​=xv​ 并且 q_u \leq p_vqu​≤pv​,那么小猫可以乘坐完 uu 号列车后在 y_uyu​ 号站点等待 p_v - q_upv​−qu​ 个时刻,并在时刻 p_vpv​ 乘坐 vv 号列车。

小猫只想回到猫窝并且减少途中的麻烦,对此它用烦躁值来衡量。

  • 小猫在站点等待时将增加烦躁值,对于一次 t (t \geq 0)t(t≥0) 个时刻的等待,烦躁值将增加 At^2 + Bt + CAt2+Bt+C,其中 A, B,CA,B,C 是给定的常数。注意:小猫登上第一班列车前,即从 00 时刻起停留在 11 号站点的那些时刻也算作一次等待。
  • 若小猫最终在时刻 zz 到达 nn 号站点,则烦躁值将再增加 zz。

形式化地说,若小猫共乘坐了 kk 班列车,依次乘坐的列车编号可用序列 s_1, s_2, \cdots , s_ks1​,s2​,⋯,sk​表示。该方案被称作一条可行的回家路线,当且仅当它满足下列两个条件:

  1. x_{s1} = 1xs1​=1 , y_{sk} = nysk​=n
  2. 对于所有 j (1 \leq j < k)j(1≤j<k),满足 y_{sj} = x_{s_{j+1}}ysj​=xsj+1​​ 且 q_{sj}\leq p_{s_{j+1}}qsj​≤psj+1​​

对于该回家路线,小猫得到的烦躁值将为:

q_{s_k}+(A\times p_{s_1}^2+B\times p_{s_1}+C)+\sum_{j=1}^{k-1}(A(p_{s_{j+1}}-q_{s_j})^2+B(p_{s_{j+1}}-q_{s_j})+C)qsk​​+(A×ps1​2​+B×ps1​​+C)+j=1∑k−1​(A(psj+1​​−qsj​​)2+B(psj+1​​−qsj​​)+C)

小猫想让自己的烦躁值尽量小,请你帮它求出所有可行的回家路线中,能得到的最 小的烦躁值。题目保证至少存在一条可行的回家路线。

输入格式

第一行五个整数 n, m, A, B,Cn,m,A,B,C,变量意义见题目描述。

接下来 mm 行,第 ii 行四个整数 x_i, y_i, p_i, q_ixi​,yi​,pi​,qi​,分别表示 ii 号列车的出发站、到达站、出发时刻与到达时刻。

输出格式

输出仅一行一个整数,表示所求的答案。

样例 #1

样例输入 #1

3 4 1 5 10
1 2 3 4
1 2 5 7
1 2 6 8
2 3 9 10

Copy

样例输出 #1

94

Copy

样例 #2

样例输入 #2

4 3 1 2 3
1 2 2 3
2 3 5 7
3 4 7 9

Copy

样例输出 #2

34

Copy

提示

更多样例

您可以通过附加文件获得更多样例。

样例 3

见附加文件的 route/route3.in 与 route/route3.ans

该样例的数据类型与最终测试点 5 \sim 85∼8 一致。

样例 4

见附加文件的 route/route4.in 与 route/route4.ans

该样例的数据类型与最终测试点 11 \sim 1411∼14 一致。

样例 5

见附加文件的 route/route5.in 与 route/route5.ans

该样例的数据类型与最终测试点 18 \sim 2018∼20 一致。

样例 1 解释

共有三条可行的回家路线:

  • 依次乘坐 1,4 号列车,得到的烦躁值为:10 + (1 \times 3^2 + 5 \times 3 + 10) + (1 \times (9 - 4)^2 + 5 \times (9 - 4) + 10)= 10410+(1×32+5×3+10)+(1×(9−4)2+5×(9−4)+10)=104
  • 依次乘坐 2,4 号列车,得到的烦躁值为:10 + (1 \times 5^2 + 5 \times 5 + 10) + (1 \times (9 - 7)^2 + 5 \times (9 - 7) + 10)= 9410+(1×52+5×5+10)+(1×(9−7)2+5×(9−7)+10)=94
  • 依次乘坐 3,4 号列车,得到的烦躁值为:10 + (1 \times 6^2 + 5 \times 6 + 10) + (1 \times (9 - 8)^2 + 5 \times (9 - 8) + 10)= 10210+(1×62+5×6+10)+(1×(9−8)2+5×(9−8)+10)=102

第二条路线得到的烦躁值最小为 9494。

数据范围

对于所有测试点:2\le n\le 10^5,1\le m\le 2\times 10^5,0 \le A \le 10 , 0 \le B, C \le 10^6,1 \le x_i, y_i \le n , x_i \neq y_i , 0 \le p_i < q_i \le 10^32≤n≤105,1≤m≤2×105,0≤A≤10,0≤B,C≤106,1≤xi​,yi​≤n,xi​=yi​,0≤pi​<qi​≤103。

每个测试点的具体限制见下表:

测试点编号nnmmA,B,CA,B,C 的特殊限制其他特殊条件
1\sim 21∼2\le 100≤100=n-1=n−1y_i=x_i+1yi​=xi​+1
3\sim 43∼4\le 100≤100A=B=C=0A=B=C=0
5\sim 85∼8\le 2\times 10^3≤2×103\le 4\times 10^3≤4×103

$x_i

 

代码:

#include <bits/stdc++.h>
#define N 200005
#define ll long long
#define db double
#define getchar nc
using namespace std;
inline char nc(){static char buf[100000],*p1=buf,*p2=buf;return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
inline int read()
{register int x=0,f=1;register char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x*f;
}
inline void write(register ll x)
{if(!x)putchar('0');if(x<0)x=-x,putchar('-');static int sta[20];register int tot=0;while(x)sta[tot++]=x%10,x/=10;while(tot)putchar(sta[--tot]+48);
}
inline int Max(register int a,register int b)
{return a>b?a:b;
}
inline ll Min(register ll a,register ll b)
{return a<b?a:b;
}
struct node{ll x,y;int id;
};
int n,m,A,B,C,maxT=0;
int x[N],y[N],p[N],q[N],head[N];
ll ans=1926081700000000ll,dp[N];
vector<int> d[1005];
vector<node>que[N];
queue<int> res[1005];
inline db gslope(register node a,register node b)
{return 1.0*(a.y-b.y)/(1.0*(a.x-b.x));
}
inline void ins(register int id)
{int pos=y[id];node now=(node){q[id],dp[id]+A*q[id]*q[id]-B*q[id],id};while(que[pos].size()-head[pos]>=2){int len=que[pos].size();if(gslope(que[pos][len-1],que[pos][len-2])<gslope(que[pos][len-2],now))break;que[pos].pop_back();}que[pos].push_back(now);
}
inline void del(register db slpe,register int pos)
{while(que[pos].size()-head[pos]>=2){if(gslope(que[pos][head[pos]],que[pos][head[pos]+1])>slpe)return;++head[pos];}
}
int main()
{n=read(),m=read(),A=read(),B=read(),C=read();for(register int i=1;i<=m;++i)x[i]=read(),y[i]=read(),p[i]=read(),q[i]=read(),maxT=Max(maxT,q[i]);for(register int i=1;i<=m;++i)d[p[i]].push_back(i);que[1].push_back((node){0,0,0});for(register int t=0;t<=maxT;++t){while(!res[t].empty())ins(res[t].front()),res[t].pop();int len=d[t].size();for(register int k=0;k<len;++k){int id=d[t][k];int pos=x[id];if(que[pos].size()==head[pos])continue;db slpe=2.0*A*p[id];del(slpe,pos);int j=que[pos][head[pos]].id;dp[id]=dp[j]+1ll*A*(p[id]-q[j])*(p[id]-q[j])+1ll*B*(p[id]-q[j])+C;res[q[id]].push(id);if(y[id]==n)ans=Min(ans,dp[id]+q[id]);}}write(ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修改密码和再次确认密码的js和element-ui的使用

<template><div><!-- plan的插槽 --><plan title"修改密码"><!-- 插槽的名字 --><span slot"header">修改密码</span><el-form:model"ruleForm2"status-icon:rules"rules2"ref"rul…

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1&#xff09;巩固对串的理解&#xff1b; 2&#xff09;掌握串的基本操作实现&#xff1b; 3&#xff09;掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…

【数据结构】实验一:绪论

实验一 绪论 一、实验目的与要求 1&#xff09;熟悉C/C语言&#xff08;或其他编程语言&#xff09;的集成开发环境&#xff1b; 2&#xff09;通过本实验加深对算法时间复杂度的理解&#xff1b; 3&#xff09;结合具体的问题分析算法时间复杂度。 二、实验内容 设计程…

深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

目录 前言 Stream geospatial HyperLogLog Bitmaps Bitfields 前言 redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛&#xff0c;同时 redis 也推出了额外的 5 个数据类型&#xff0c;他们分别是针对特殊场景才进行的应用的. Ps&#xff1a;这几种…

odoo16-domain

odoo16-domain 参考:https://blog.csdn.net/u013250491/article/details/86699928 domain的使用注意以下几点: 是在py文件中使用还是在xml中使用,py文件是在后端使用可以利用orm, 而xml是在前端渲染,使用的是js,没有办法使用orm如果在xml中使用,domain的格式建议为[[]], 二维…

Paragon NTFS2023最新版Mac读写NTFS磁盘工具

Paragon NTFS for Mac是Mac平台上一款非常优秀的读写工具&#xff0c;可以在Mac OS X中完全读写、修改、访问NTFS硬盘、U盘等外接设备的文件。这款软件最大的亮点简书可以让我们读写 NTFS 分区&#xff0c;因为在Mac OS X 系统上&#xff0c;默认状态下我们只能读取NTFS 分区&a…

速成版-带您一天学完python自动化测试(selenium)

Selenium是一套web网站的程序自动化操作解决方案。我们通过编写自动化程序&#xff0c;使得自动完成浏览器界面的相关操作&#xff0c;除了能够自动化的完成相关操作&#xff0c;还能从web页面获取相关信息&#xff0c;然后通过程序进行分析处理&#xff0c;本质上就是提升从网…

25.5 matlab里面的10中优化方法介绍——牛顿法(matlab程序)

1.简述 1 牛顿法简介 牛顿迭代法&#xff08;Newton’s method&#xff09;又称为牛顿-拉夫逊&#xff08;拉弗森&#xff09;方法&#xff08;Newton-Raphson method&#xff09;&#xff0c;它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 多数方程不存…

【spring】spring bean的生命周期

spring bean的生命周期 文章目录 spring bean的生命周期简介一、bean的创建阶段二、bean的初始化阶段三、bean的销毁阶段四、spring bean的生命周期总述 简介 本文测试并且介绍了spring中bean的生命周期&#xff0c;如果只想知道结果可以跳到最后一部分直接查看。 一、bean的…

图像滤波器

图像噪声 • 图像噪声是图像在获取或是传输过程中受到随机信号干扰&#xff0c;妨碍人们对图像理解及分析处理 的信号。 • 图像噪声的产生来自图像获取中的环境条件和传感元器件自身的质量&#xff0c;图像在传输过程中产 生图像噪声的主要因素是所用的传输信道受到了噪声…

【技术架构】技术架构的演进

文章目录 前言1.名词解释(常见概念)1.1 应用&#xff08;Application&#xff09; / 系统&#xff08;System&#xff09;1.2 模块&#xff08;Module&#xff09; / 组件&#xff08;Component&#xff09;1.3 分布式&#xff08;Distributed&#xff09;1.4 集群&#xff08;…

机器学习 day30(正则化参数λ对模型的影响)

λ对Jcv和Jtrain的影响 假设该模型为四阶多项式当λ很大时&#xff0c;在最小化J的过程中&#xff0c;w会很小且接近0&#xff0c;此时模型f(x)近似于一个常数&#xff0c;所以此时模型欠拟合&#xff0c;Jtrain和Jcv都很大当λ很小时&#xff0c;表示模型几乎没有正则化&…

5.2.tensorRT基础(2)-使用onnx解析器来读取onnx文件(源码编译)

目录 前言1. ONNX解析器2. libnvonnxparser.so3. 源代码编译4. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 t…

Rocky Linux 8.4在Tesla P100服务器里的部署及显卡cudnn安装-极度精简

安装Rocky linux教程 https://developer.aliyun.com/article/1074889 注意事项 Tesla P100服务器&#xff0c;按Delete进入bios,设置Daul模式&#xff0c;第一选项选UEFI hard disk(用驱动盘选这个)&#xff0c;usb的就选UEFI usb 安装rocky linux时&#xff0c;这两项默认&…

css中flex后文本溢出的问题

原因&#xff1a; 为了给flex item提供一个合理的默认最小尺寸&#xff0c;flex将flex item的min-width 和 min-height属性设置为了auto flex item的默认设置为&#xff1a; min-width&#xff1a; auto 水平flex布局 min-height&#xff1a;auto 垂直flex布局 解决办法&…

【ICCV2023】Scale-Aware Modulation Meet Transformer

Scale-Aware Modulation Meet Transformer, ICCV2023 论文&#xff1a;https://arxiv.org/abs/2307.08579 代码&#xff1a;https://github.com/AFeng-x/SMT 解读&#xff1a;ICCV2023 &#xff5c; 当尺度感知调制遇上Transformer&#xff0c;会碰撞出怎样的火花&#xff1…

【Nodejs】Node.js简介

1.前言 Node 的重要性已经不言而喻&#xff0c;很多互联网公司都已经有大量的高性能系统运行在 Node 之上。Node 凭借其单线程、异步等举措实现了极高的性能基准。此外&#xff0c;目前最为流行的 Web 开发模式是前后端分离的形式&#xff0c;即前端开发者与后端开发者在自己喜…

Gitlab 合并分支与请求合并

合并分支 方式一&#xff1a;图形界面 使用 GitGUI&#xff0c;右键菜单“GitExt Browse” - 菜单“命令” - 合并分支 方式二&#xff1a;命令行 在项目根目录下打开控制台&#xff0c;注意是本地 dev 与远程 master 的合并 // 1.查看本地分支&#xff0c;确认当前分支是否…

2、HAproxy调度算法

HAProxy的调度算法可以大致分为以下几大类&#xff1a; 静态算法&#xff1a;这类算法的调度策略在配置时就已经确定&#xff0c;并且不会随着负载的变化而改变。常见的静态算法有&#xff1a; Round Robin(轮询) Least Connections(最少连接数) Static-Weight(静态权重) Sourc…

QSlider 样式 Qt15.15.2 圆形滑块

在看文档的时候测试了一下demo&#xff0c;然后发现了一个有意思的东西&#xff0c;自定义滑块为带边框的圆形。 在设置的时候边框总是和预期的有点误差&#xff0c;后来发现了这样一个计算方式可以画一个比较标准的圆。&#xff08;ABCDEF在下方代码块内&#xff09; 滑块的…