题目描述

题解

考虑啥限制都没有的话,也就是在一个序列上且没有 l l l 的限制,那就是 d p dp dp 然后斜率优化

f i f_i fi​ 表示 i i i 的答案, f i = m i n ( f j + ( d i − d j ) p i + q i ) f_i=min(f_j+(d_i-d_j)p_i+q_i) fi​=min(fj​+(di​−dj​)pi​+qi​) ,其中 d i d_i di​ 表示 s s s 的前缀和,可以化成斜率优化的式子

由于斜率不递增所以在凸包上二分即可

考虑 l l l 的限制的话,那我们可以做类似 c d q cdq cdq 的东西,也就是考虑 [ l , m i d ] [l,mid] [l,mid] 对 [ m i d + 1 , r ] [mid+1,r] [mid+1,r] 的影响,那可以对右区间以最前能取到的点从大到小排序,然后双指针加入凸包即可

考虑在一棵树上的话,那我们考虑点分治,即对于树 u u u 求出了重心 r t rt rt ,考虑 ( u , r t ) (u,rt) (u,rt) 路径上的点对 r t rt rt 子树的影响,那我们可以先除去 r t rt rt 子树内的点(除了 r t rt rt ),然后递归求出剩下点的 d p dp dp 值,然后我们可以像刚刚的操作即把 r t rt rt 子树内除了 r t rt rt 的点按照最高能取到的点按深度从大到小排序,然后双指针加入凸包即可

效率: O ( n l o g 2 n ) O(nlog^2n) O(nlog2n)

代码

#include <bits/stdc++.h>
#define LL long long
#define db long double
using namespace std;
const int N=2e5+5;
int n,fa[N],o,rt,sz[N],son[N],a[N],hd[N],V[N],nx[N],t,S[N],tp;
LL d[N],s[N],p[N],q[N],g[N],f[N];bool vis[N];
bool cmp(int A,int B){return d[A]-g[A]>d[B]-g[B];
}
void add(int u,int v){nx[++t]=hd[u];V[hd[u]=t]=v;
}
db K(int x,int y){return ((db)f[y]-f[x])/((db)d[y]-d[x]);
}
void Dis(int x){for (int i=hd[x];i;i=nx[i])d[V[i]]=d[x]+s[V[i]],Dis(V[i]);
}
void Sz(int x){sz[x]=1;for (int i=hd[x],v;i;i=nx[i])if (!vis[v=V[i]])Sz(v),sz[x]+=sz[v];
}
void Rt(int x){son[x]=o-sz[x];for (int i=hd[x],v;i;i=nx[i])if (!vis[v=V[i]])Rt(v),son[x]=max(son[x],sz[v]);if (son[x]<=son[rt]) rt=x;
}
void find(int x){a[++t]=x;for (int i=hd[x];i;i=nx[i])if (!vis[V[i]]) find(V[i]);
}
void work(int x){Sz(x);o=sz[x];rt=0;Rt(x);if (o==1){vis[x]=1;return;}for (int i=hd[rt];i;i=nx[i]) vis[V[i]]=1;int u=rt;work(x);tp=t=0;for (int i=hd[u];i;i=nx[i])vis[V[i]]=0,find(V[i]);sort(a+1,a+t+1,cmp);int X=x;x=u;for (int i=1,v,l,r,j;i<=t;i++){v=a[i];while(d[u]>=d[X] && d[u]>=d[v]-g[v]){while(tp>1 && K(S[tp-1],u)>=K(S[tp-1],S[tp])) tp--;S[++tp]=u;u=fa[u];}if (!tp) continue;l=1;r=tp;while(l<r){j=(l+r+1)>>1;if (K(S[j],S[j-1])>=p[v]) l=j;else r=j-1;}f[v]=min(f[v],f[S[l]]+(d[v]-d[S[l]])*p[v]+q[v]);}vis[x]=1;for (int i=hd[x];i;i=nx[i]) work(V[i]);
}
int main(){cin>>n>>tp;son[0]=1e9;d[0]=-1;for (int i=2;i<=n;i++)scanf("%d%lld%lld%lld%lld",&fa[i],&s[i],&p[i],&q[i],&g[i]),f[i]=2e18,add(fa[i],i);Dis(1);work(1);for (int i=2;i<=n;i++)printf("%lld\n",f[i]);return 0;
}

#1992. 购票(ticket)相关推荐

  1. SMSC2021 Day7Day8 部分题解

    SMSC2021 Day7&Day8 Day 7 T3 纸带染色 color (区间 DP ,※子问题化分治) Day 8 T2 购票 ticket (最短路,※点权转边权,虚拟源点技巧) D ...

  2. 基于Java Web技术的动车购票系统

    毕 业 设 计 中文题目 基于Java Web技术的动车购票系统 英文题目 Train ticket system based on Web Java Technology 毕业设计诚信声明书 本人郑 ...

  3. C语言阶段小项目(火车购票系统)

    铁路售票管理系统     程序中传递的有信息有:票务信息(包括车次,出发站.到达站.出发时间日期,历时.票数,票价)个人购票信息(姓名,身份信息,车次,出发时间日期,座位号,票价) 票务浏览     ...

  4. 票据ticket实现方式java代码_Java代码实践12306售票算法(二)

    周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成 ...

  5. CCF CSP 201609-2 火车购票(C++语言100分)[简单模拟题]

    1. 问题链接:CCF 201609-2 火车购票 试题编号: 201609-2 试题名称: 火车购票 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 请实现一个铁路购票系统的 ...

  6. 【爬虫实战】12306购票抓包分析以及任务分解

    12306购票抓包分析以及任务分解 前言 1. 抓包分析 1.1 `https://www.12306.cn/index/` 1.2 `https://kyfw.12306.cn/otn/login/ ...

  7. 火车订票管理系统/火车购票网站系统/火车订票网站/火车票售卖系统

    摘要:随着科技的飞速发展,计算机已经广泛的应用于各行各业当中,而且日趋普及.在各个领域内,计算机的应用已经十分广泛,各种智能设备都与计算机紧密结合在一起,主要应用于两个方面:一是以设备为主.另一种是软 ...

  8. 基于微信小程序的springboot客运汽车票购票系统源码和论文

    在客运公司工作 7 年之余,对客运管理的难度深有感触.特别是在春运期 间购票难依旧是长途汽车订票的一大难题.长途汽车和火车的订票管理虽然有 差异,但大体上是相同的.长途汽车在售票的过程中需要对旅客的起 ...

  9. 基于javaweb+mysql的电影院售票购票电影票管理系统(前台、后台)

    基于javaweb+mysql的电影院售票购票电影票管理系统(前台.后台) 运行环境 Java≥8.MySQL≥5.7 开发工具 eclipse/idea/myeclipse/sts等均可配置运行 适 ...

最新文章

  1. 《剑指Offer》——二维数组中的查找(JZ1)C++
  2. 微信扫描登录(获取扫描人信息)
  3. redis报错:jedis connection exception unexpected end of stream
  4. 超声和免疫学指标的特征能否反映RA临床缓解的表型?[EULAR2015_THU0121]
  5. (19)脚手架工具Yeoman
  6. 【转】:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
  7. 002_关于six版本过低报cannot import name urllib_parse的问题
  8. Hadoop:Hadoop单机伪分布式的安装和配置
  9. ---perl 模块安装方法
  10. Hadoop学习2:Hadoop环境配置:JDK 1.8和Hadoop配置
  11. 如何建立低科技互联网
  12. 项目质量管理的几种常规方法
  13. 组件化与插件化的差别在哪里?醍醐灌顶!
  14. [算法学习no5]kmp
  15. so easy! 10行代码写个狗屁不通文章生成器
  16. Fragment跳转Fragment以及闭坑指南、方法isadded()
  17. 英语笔记1.2.2022
  18. 如何删除word中页眉的横线
  19. java 字体宽度_Java字体大小从宽度
  20. 2021世界人工智能大会

热门文章

  1. 【Linux】进程通信
  2. spark中的转换算子和行动算子区别(transformations and actions)
  3. substring从指定字符串开始截取
  4. android gpu平板 推荐,性能强的不像话,最强安卓平板华为平板M6上手
  5. Halcon连接大恒相机
  6. 自考行政管理题库(含答案)
  7. c语言银行信用卡卡管理系统,自编自导多人多卡信用卡管理系统
  8. 利用正则截取匹配的字符串前后内容同
  9. model 和WEB前台页面提交完美自动填充
  10. 2018年度亚太区最佳机场贵宾室公布