首页 > 其他分享 >P2305 [NOI2014] 购票

P2305 [NOI2014] 购票

时间:2023-06-26 09:01:07浏览次数:38  
标签:线段 SZ 城市 到达 购票 NOI2014 P2305 李超树

P2305 [NOI2014] 购票

题意

今年夏天,NOI 在 SZ 市迎来了她三十周岁的生日。来自全国 \(n\) 个城市的 OIer 们都会从各地出发,到 SZ 市参加这次盛会。

全国的城市构成了一棵以 SZ 市为根的有根树,每个城市与它的父亲用道路连接。为了方便起见,我们将全国的 \(n\) 个城市用 \(1\sim n\) 的整数编号。其中 SZ 市的编号为 \(1\)。对于除 SZ 市之外的任意一个城市 \(v\),我们给出了它在这棵树上的父亲城市 \(f_v\) 以及到父亲城市道路的长度 \(s_v\)。

从城市 \(v\) 前往 SZ 市的方法为:选择城市 \(v\) 的一个祖先 \(a\),支付购票的费用,乘坐交通工具到达 \(a\)。再选择城市 \(a\) 的一个祖先 \(b\),支付费用并到达 \(b\)。以此类推,直至到达 SZ 市。

对于任意一个城市 \(v\),我们会给出一个交通工具的距离限制 \(l_v\)。对于城市 \(v\) 的祖先 A,只有当它们之间所有道路的总长度不超过 \(l_v\) 时,从城市 \(v\) 才可以通过一次购票到达城市 A,否则不能通过一次购票到达。

对于每个城市 \(v\),我们还会给出两个非负整数 \(p_v,q_v\) 作为票价参数。若城市 \(v\) 到城市 A 所有道路的总长度为 \(d\),那么从城市 \(v\) 到城市 A 购买的票价为 \(dp_v+q_v\)。

每个城市的 OIer 都希望自己到达 SZ 市时,用于购票的总资金最少。你的任务就是,告诉每个城市的 OIer 他们所花的最少资金是多少。

题解

模拟赛的时候脑子爆掉了。
设 \(f_i\) 表示 \(i\) 号点到根的最小花费。 显然有转移方程:

\[f_i = \min (f_j+(d_i-d_j)p_i+q_i) \]

这里满足 \(j\) 是 \(i\) 的祖先,\(d_i-d_j \leq l_i\)
看着很斜优,改一下:

\[f_i = min(-d_jp_i+f_j)+d_ip_i+q_i \]

显然对于一条一次函数 \(y = kx+b\),\(x = p_i\) , \(k = -d_j\) ,\(b = f_j\),可以用李超树维护。

若果是一条链的话已经可以直接做了,但是有树的情况,并且还有一个转移距离的限制。

1.如果是树的情况,我们其实可以撤销李超树,退出一个点的时候在树上删除对应直线就好了。

2.如果在链上有距离限制怎么做,显然我们是要查的是一段区间中的李超树的情况,使用线段树套李超树,用类似于标记永久化的方式,对线段树上的每一个节点都维护一颗李超树,插入一条线段的时候吧这个位置在线段树的路径上的李超树都插入就好了。

3.如果距离限制和树拼起来改怎么做,显然可以套一个树剖上去将树上问题序列化去做到 \(O(nlog^3n)\),出栈序是一个不错的选择,对于一个点 \(i\) ,在出栈序里面找到第一个满足 \(d_i-d_j \leq l_i\) 的点,出栈序中 \(i,j\) 之间有贡献的点都是 \(i,j\) 的路径之上的,不是的都还没有做到,没有贡献,最后时间复杂度 \(O(nlog^2n)\)。

...

这道题是一道技巧性很强的一道题,出栈序对于实时算贡献并且是路径上的问题可能是一个比较好的选择。

标签:线段,SZ,城市,到达,购票,NOI2014,P2305,李超树
From: https://www.cnblogs.com/snow-panther/p/17504445.html

相关文章

  • 基于SSM的电影院购票系统开源啦
    大家好,今天给大家带来一款SSM的电影院售票系统,非常不错的一个项目,学习javaweb编程必备。下载地址在文末1.SpringMVCSpringMVC属于SpringFrameWork的后续产品,已经融合在SpringWebFlow里面。Spring框架提供了构建Web应用程序的全功能MVC模块。使用Spring可插入的MVC架构......
  • Luogu P2375 [NOI2014] 动物园
    [NOI2014]动物园题目描述近日,园长发现动物园中好吃懒做的动物越来越多了。例如企鹅,只会卖萌向游客要吃的。为了整治动物园的不良风气,让动物们凭自己的真才实学向游客要吃的,园长决定开设算法班,让动物们学习算法。某天,园长给动物们讲解KMP算法。园长:“对于一个字符串\(S\),它......
  • 电影购票系统相关
    用户故事用例图: 类图: 活动图: 设计结果: ......
  • [NOI2014]动物园
    [NOI2014]动物园这题看题目描述就知道一定是跟KMP扯上关系了。首先,如果不考虑长度超过\(\dfrac{1}{2}\)的限制的话,那么就很简单,每次求出一个新的\(ne_i\)时,如下图所示图中红色的表示目前对于前\(i\)个字符来说,最长公共前后缀为红色部分,因为两个红色部分中一定都有前后......
  • P4211 [LNOI2014]LCA
    \(\color{purple}\text{P4211[LNOI2014]LCA}\)解题方法可以发现一个结论:两个点到根节点的重合路径的长度即为他们\(LCA\)的深度。所以我们把\([l,r]\)之间的点到根节点路径上各加一,再查询\(z\)到根节点的路径的值之和即为\(\sum_{i=l}^{r}\text{dep}[\text{LCA}(i,z)]\)......
  • 基于SSM框架的航班购票系统
    @文章目录目录1、相关技术1.1、Javaweb1.2、SSM框架1.3、前端框架AngularJS1.4、数据库MySQL1.5、数据库Redis1.6、开发工具Eclipse2、需求分析2.1、系统实现目标2.2、系统功能分析2.3、系统用例图3、工程结构及其说明4、系统总体设计4.1、软件架构设计4.2、总体功能模块设计4.3......
  • [LNOI2014] LCA 树链剖分+离线处理+lca转化
    困困的开始了我的修炼树剖之旅途考虑怎么搞这个lca是说,习惯了倍增求lca,突然冒出这么一个东西还真不会搞那要么能一次性求很多个lca(?),要么把deep[lca(i,z)]这个东西转化......
  • P2375 [NOI2014] 动物园
    求num[i],表示1~i前缀的合法子串个数(满足前后缀相等,且不重合 #include<iostream>#include<cstring>usingnamespacestd;constintN=1e6+3,mod=1e9+7;......
  • P1754 球迷购票问题
    题目背景盛况空前的足球赛即将举行。球赛门票售票处排起了球迷购票长龙。按售票处规定,每位购票者限购一张门票,且每张票售价为50元。在排成长龙的球迷中有N个人手持面值50......
  • [Ynoi2014] 等这场战争结束之后
    题传非常暴力的做法:每个点维护一颗平衡树,然后启发式合并。但是这样的暴力做法会被回溯操作卡飞天。先建出一棵操作树,将回溯操作简化为回退一次操作。思考平衡树的劣势......