首页 > 其他分享 >CF1801D The way home

CF1801D The way home

时间:2023-09-25 10:22:54浏览次数:58  
标签:CF1801D 复杂度 flody 转移 way home 考虑 我们 dp

原题

翻译

非常好的一个题,有两种做法


方法1:flody+dp

首先我们确定一个最优行走方案:从 \(1\) 号节点赚到足够钱后通过最短路到达 \(x_1\) ,在 \(x_1\) 赚够足够钱后到达 \(x_2\) ,在 \(x_2\) 赚够足够钱后到达 \(x_3\) ,如此往复后到达终点

现在我们有一个问题:从 \(u\) 到 \(v\) 的路径,到达 \(v\) 点后有许多结局。我们考虑一个非常朴素的 \(dp\) :\(dp_{i,j}\) 表示走到 \(i\) 号点,剩余钱为 \(j\) 的最少表演次数,但这很明显会 \(TLE\) ,寄

但我们发现我们还有一个东西没用:每个点的权值。我们考虑通过转移顺序优化 \(dp\) ,我们用二元组 \(dp_i = (f,g)\) 表示走到 \(i\) 号点,表演 \(f\) 次且最少表演次数为 \(j\) 。这么做 \(dp\) 很明显是不对的,因为我们不知道 \(f\) 和 \(g\) 优先从哪个转移。但我们如果把 \(w_i\) 从小到大排个序,按照顺序考虑,那这个 \(dp\) 就对了

因为我们考虑假如当前 \(v\) 点的 \(dp\) 值的前驱是从 \(u_1\) 转移过来的,我们现在在考虑 \(u_2\) 对 \(v\) 的贡献,因为我们按照点权大小排了序,则我们可以保证 \(w_{u_1} \leq w_{u_2}\) ,这有什么好处呢?这说明如果出现了 \(f_2 > f_1\) ,则无论 \(g\) 的大小关系如何,我们都会选择用 \(u_2\) 更新。因为 \(g_1 < w_{u_1}\) ,我们让这个人在 \(u_2\) 点赚钱 \(f_2 - f_1\) 次,赚得的钱数 \((f_2-f_1)w_{u_2} \geq w_{u-1} > g_1\) ,因此我们从 \(u_2\) 转移更优。

但是还没完,如果 \(f_1 = f_2\) ,则我们优先考虑 \(g\) 更大的即可

因此我们只需要对图 \(O(n^3)\) 的跑一边 \(flody\) 即可解决问题

最终复杂度 \(O(n^3 + n^2 + n \log {n})\) ,复杂度瓶颈在于 \(flody\)


方法2:dijkstra + dp

我们考虑朴素 \(dp\) ,设 \(dp_{i,j,k}\) 表示走到 \(i\) 点的路径上经过的最小点权的点为 \(w_j\) ,还剩 \(k\) 元的最少赚钱次数。这个 \(dp\) 显然会 \(TLE\) ,因此我们考虑优化他。同上一个做法,我们设 \(dp_{i,j} = (f,g)\) 。然后同样的,我们把 \(f\) 当作第一关键字, \(g\) 当作第二关键字即可。注意,这里并不需要排序,因为我们在 \(dp\) 的状态里记录了上一个转移的点,对于 \(j\) 相同的 \(dp\) 状态, \(w_j\) 的值显然是相同的。

因此我们直接用 \(dijkstra\) 优化 \(dp\) 转移即可

最终复杂度 \(O((n^2 + nm) \log n)\)

标签:CF1801D,复杂度,flody,转移,way,home,考虑,我们,dp
From: https://www.cnblogs.com/fox-konata/p/17727278.html

相关文章

  • SpringCloudAlibaba整合Gateway
    在微服务架构中,加入网关(Gateway)是一种常见的模式,其作用是为了更好地管理和控制微服务的访问和通信。网关可以看作是微服务架构的入口,它位于客户端和内部微服务之间,充当了一个中间层的角色。以下是加入网关的作用:统一访问点:通过网关,客户端只需要与一个统一的访问点进行通信,而不用直......
  • Homework 验证码界面(非全部自己完成)
    importjavax.swing.*;//import代表“引入”//javax.swing代表“路径”(在javax文件夹下的swing文件夹)//*代表“全部”importjava.awt.*;//importjava.awt.event.ActionEvent;//是JAVAAWT抽象窗口工具集包的一部分,用于......
  • 报错error Component name "Index" should always be multi-word vue/multi-word-co
    1、问题说明:在创建组件命名时,引用index.vue的过程中报错;2、报错的原因及分析:其一、报错的全称为:errorComponentname"index"shouldalwaysbemulti-wordvue/multi-word-component-names翻译为:错误组件名称“索引”应始终为多词vue/多词组件名称其二、问题分析:新手在使用......
  • 从0开始搭建SQL Server AlwaysOn
    从0开始搭建SQLServerAlwaysOn   第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnblogs.com/lyhabc/p/4682028.html第三篇http://www.cnblogs.com/lyhabc/p/4682986.html第四篇http://www.cnblogs.com/lyhabc/p/6136227.html搭建非域AlwaysOnwin2......
  • 修改经过Spring Gateway的表单中的Json数据
    背景使用SpringCloudGateway作为网关时有时候一个请求是既包含excel又包含json的表单数据,出于各种层面考虑网关需要获取并更新其中的json数据依赖SpringBoot版本:2.7.15Hutool:5.8.21Java:11实现逻辑实现分为2个部分使用上文提到的ModifyRequestBodyGatewayFilterF......
  • 修改经过Spring Gateway的Json数据
    背景使用SpringCloudGateway作为网关时经常会需要对报文内的json数据进行修改,但是目前看到的实现方法看起来都很复杂,这里提供一种使用Spring官方提供的ModifyRequestBodyGatewayFilterFactory类来修改json报文的方法依赖SpringBoot版本:2.7.15Hutool:5.8.21Java:11实......
  • SQL Server关于AlwaysOn的理解-读写分离的误区(一)
       很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到。因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到辅助副本上。这是一个认知误区,本文通过原理和测试进行解释。实现原理从下图可......
  • 1131 Subway Map
    题目:Inthebigcities,thesubwaysystemsalwayslooksocomplextothevisitors.Togiveyousomesense,thefollowingfigureshowsthemapofBeijingsubway.Nowyouaresupposedtohelppeoplewithyourcomputerskills!Giventhestartingpositionofy......
  • 本机hadoop version命令报错--JAVA_HOME is not set问题的解决
    问题描述输入hadoopversion命令显示JAVA_HOME没有配置,但是本机的jdk配置正常!问题解决编辑hadoop/etc/hadoop目录下的hadoop-env.cmd文件:将JAVA_HOME的值换成本机的绝对路径;保存退出,再次尝试:......
  • SQL Server关于AlwaysOn的理解-读写分离的误区(一)
    前言很多人认为AlwaysOn在同步提交模式下数据是实时同步的,也就是说在主副本写入数据后可以在辅助副本立即查询到。因此期望实现一个彻底的读写分离策略,即所有的写语句在主副本上,所有的只读语句分离到辅助副本上。这是一个认知误区,本文通过原理和测试进行解释。实现原理从下图......