令$dp[i]$表示经过第$i$条边后的最小烦躁值,有$且dp[i]=\min_{y_{j}=x_{i}且q_{j}\le p_{i}}dp[j]+f(p_{i}-q_{j})$,其中$f(x)=Ax^{2}+Bx+C$
由于$p_{j}<q_{j}\le p_{i}$,按$p_{i}$从小到大枚举,当$q_{j}\le p_{i}$时将信息记在$y_{j}$上,求$dp[i]$时枚举$x_{i}$上的信息即可,复杂度$o(m^{2})$
将后面的式子拆开,提出与$j$无关的部分,即$且dp[i]=f(p_{i})+\min_{y_{j}=x_{i}且q_{j}\le p_{i}}-2Ap_{i}q_{j}+(dp[j]+Aq_{j}^2-Bq_{j})$
将后半部分看作$F_{j}(x)=-2Aq_{j}x+(dp[j]+Aq_{j}^2-Bq_{j})$的直线,对每一个点用凸包来维护这些直线,利用斜率$q_{j}$和询问$p_{i}$的单调性可以做到均摊$o(1)$
复杂度计算:每一条直线插入/询问一次,插入/删除均摊均为$o(1)$,总复杂度$o(m)$;对$p_{j}\le p_{i}<q_{j}$的直线维护一个$set$,复杂度为$o(m\log m)$(对$q$排序可以做到$o(m)$,但排序复杂度也为$o(m\log m)$)

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define k(i) -2*A*e[i].q
5 #define b(i) (dp[i]+A*e[i].q*e[i].q-B*e[i].q)
6 struct ji{
7 int x,y,p,q;
8 }e[N];
9 vector<int>v[N];
10 set<pair<int,int> >s;
11 int n,m,A,B,C,ans,sz[N],dp[N];
12 bool cmp(ji x,ji y){
13 return x.p<y.p;
14 }
15 double point(int x,int y){
16 if (k(x)==k(y)){
17 if (b(x)==b(y))return 0;
18 if (b(x)<b(y))return 0x3f3f3f3f;
19 return -0x3f3f3f3f;
20 }
21 return 1.0*(b(y)-b(x))/(k(x)-k(y));
22 }
23 void add(int x){
24 int k=e[x].y;
25 while ((sz[k]>1)&&(point(v[k][sz[k]-2],v[k][sz[k]-1])>point(v[k][sz[k]-1],x))){
26 v[k].erase(--v[k].end());
27 sz[k]--;
28 }
29 v[k].push_back(x);
30 sz[k]++;
31 }
32 int query(int x){
33 int k=e[x].x;
34 if (!sz[k])return 0x3f3f3f3f;
35 while ((sz[k]>1)&&(point(v[k][0],v[k][1])<e[x].p)){
36 v[k].erase(v[k].begin());
37 sz[k]--;
38 }
39 return k(v[k][0])*e[x].p+b(v[k][0]);
40 }
41 int main(){
42 freopen("route.in","r",stdin);
43 freopen("route.out","w",stdout);
44 scanf("%d%d%d%d%d",&n,&m,&A,&B,&C);
45 for(int i=1;i<=m;i++)scanf("%d%d%d%d",&e[i].x,&e[i].y,&e[i].p,&e[i].q);
46 sort(e+1,e+m+1,cmp);
47 e[0].y=1;
48 s.insert(make_pair(0,0));
49 for(int i=1;i<=m;i++){
50 while ((s.size())&&((*s.begin()).first<=e[i].p)){
51 add((*s.begin()).second);
52 s.erase(s.begin());
53 }
54 dp[i]=query(i)+A*e[i].p*e[i].p+B*e[i].p+C;
55 s.insert(make_pair(e[i].q,i));
56 }
57 ans=0x3f3f3f3f;
58 for(int i=1;i<=m;i++)
59 if (e[i].y==n)ans=min(ans,dp[i]+e[i].q);
60 printf("%d",ans);
61 return 0;
62 }

[loj3156]回家路线的更多相关文章

  1. NOI2019 回家路线 DP

    「NOI2019」回家路线 链接 loj 思路 f[i][j]第i个点,时间为j,暴力转移 复杂度O(m*t),好像正解是斜率优化,出题人太不小心了233 代码 #include <bits/s ...

  2. [NOI2019]回家路线

    [NOI2019]回家路线 题目大意: 有\(n\)个站点,\(m\)趟车,每趟车在\(p_i\)时从\(x_i\)出发,\(q_i\)时到达\(y_i\). 若小猫共乘坐了\(k\)班列车,依次乘坐 ...

  3. P5468 [NOI2019]回家路线 斜率优化 dp

    LINK:回家路线 (文化课 oi 双爆炸 对 没学上的就是我.(我错了不该这么丧的. 不过还能苟住一段时间.当然是去打NOI了 这道题去年同步赛的时候做过.不过这里再次提醒自己要认真仔细的看题目 不 ...

  4. 【LOJ3156】「NOI2019」回家路线

    [题目链接] [点击打开链接] [题目概括] 现在有\(n\)个站点,\(m\)条火车路线,每一条货车路线都有一个起点站点.终点站点.开始时间和到站时间. 对于一直在起点\(1\)的人,终点是\(n\ ...

  5. LOJ 3156: 「NOI2019」回家路线

    题目传送门:LOJ #3156. 题意简述: 有一张 \(n\) 个点 \(m\) 条边的有向图,边有两个权值 \(p_i\) 和 \(q_i\)(\(p_i<q_i\))表示若 \(p_i\) ...

  6. 【题解】Luogu P5468 [NOI2019]回家路线

    原题传送门 前置芝士:斜率优化 不会的可以去杜神博客学 这道题我考场上只会拆点跑最短路的70pts做法 后来回家后发现错误的爆搜都能拿满分(刀片) 还有很多人\(O(mt)\)过的,还是要坚持写正解好 ...

  7. [NOI2019]回家路线(最短路,斜率优化)

    终于把这鬼玩意弄完了-- 为什么写的这么丑-- (顺便吐槽 routesea) 最短路的状态很显然:\(f[i]\) 表示从第 \(i\) 条线下来的最小代价. 首先明显要把那个式子拆开.直觉告诉我们 ...

  8. 【斜率优化】【P5468】 [NOI2019]回家路线

    Description 给定 \(n\) 点,这 \(n\) 个点由 \(m\) 班列车穿插连结.对于第 \(i\) 班列车,会在 \(p_i\) 时刻从 \(x_i\) 站点出发开向 \(y_i\) ...

  9. Luogu P5468 [NOI2019]回家路线 (斜率优化、DP)

    题目链接: (luogu) https://www.luogu.org/problemnew/show/P5468 题解: 爆long long毁一生 我太菜了,这题这么简单考场上居然没想到正解-- ...

随机推荐

  1. 从零入门 Serverless | 教你使用 IDE/Maven 快速部署 Serverless 应用

    作者 | 许成铭(竞霄) 阿里云开发工程师 SAE 应用部署方式 1. SAE 概述 首先,简单介绍一下 SAE.SAE 是一款面向应用的 Serverless PaaS 平台,支持 Spring C ...

  2. 学校选址(ArcPy实现)

    一.背景 合理的学校空间位置布局,有利于学生的上课与生活.学校的选址问题需要考虑地理位置.学生娱乐场所配套.与现有学校的距离间隔等因素,从总体上把握这些因素能够确定出适宜性比较好的学校选址区. 二.目 ...

  3. Miller Rabin 详解 && 小清新数学题题解

    在做这道题之前,我们首先来尝试签到题. 签到题 我们定义一个函数:\(qiandao(x)\) 为小于等于 x 的数中与 x 不互质的数的个数.要求 \(\sum\limits _{i=l}^r qi ...

  4. 【数据结构与算法Python版学习笔记】图——强连通分支

    互联网 我们关注一下互联网相关的非常巨大图: 由主机通过网线(或无线)连接而形成的图: 以及由网页通过超链接连接而形成的图. 网页形成的图 以网页(URI作为id)为顶点,网页内包含的超链接作为边,可 ...

  5. sql递归查询部门数据

    1 with cte as 2 ( 3 select a.DepartCode,a.DepartName,a.ParentDepartCode from tbDeparts a where Paren ...

  6. BUAA 2020 软件工程 热身作业

    BUAA 2020 软件工程 热身作业 Author: 17373051 郭骏 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 第一次作业-热身! ...

  7. 修改git仓库的远程地址

    在我们开发的过程中,代码一般是由 git 来管理的,但有些时候我们的 git 仓库的地址可能发生了变换,比如我们使用的 gitLab 地址发生了变化,那么这个时候如何来将原项目的 git 地址进行修改 ...

  8. ESD

    Reverse standoff voltage是保护二极管的反向工作电压, 在这个电压, 二极管是不工作的. Breakdown voltage 是二极管的击穿电压, 超过这个电压后, 二极管迅速反 ...

  9. 【做题记录】CF1451E2 Bitwise Queries (Hard Version)

    CF1451E2 Bitwise Queries (Hard Version) 题意: 有 \(n\) 个数( \(n\le 2^{16}\) ,且为 \(2\) 的整数次幂,且每一个数都属于区间 \ ...

  10. OpenWrt编译问题记录

    错误一.config.status: error: cannot find input file: `xmetadataretriever/Makefile.in' configure: creati ...