首页 > 其他分享 >浅谈类 k 短路问题

浅谈类 k 短路问题

时间:2023-06-27 22:37:38浏览次数:42  
标签:一条 浅谈 加入 短路 后继 问题 序列 复杂度

u 群题

题意:\(n\) 个数,对于所有大小在 \([L,R]\) 内的子集求和并排序,求前 \(k\) 小子集的信息。

排序,记数组为 \(a_{1,\cdots,n}\)。

先考虑 \(L=R\) 的情况。最小的子集一定是 \(a_{1,\cdots,L}\),第二小则是将 \(a_L\) 改为 \(a_{L+1}\),推广到更一般的情况——我们以 \([1,L]\) 作为初始状态,每次挑选一个前缀保留下来,剩余区间向后平移继续处理。

这一生成方法对应着一颗叶向树,且父亲的权值小于儿子的权值,因此前 \(k\) 小一定是包含根的一个连通块。

一个朴素的想法是用堆维护所有遍历到的状态,每次取出最小状态并将其所有儿子加入。但是儿子数量过多,复杂度会退化,考虑兄弟儿子表示法将树三度化,每次要么加入最优的儿子,要么加入一个未加入的最优的兄弟,合理地维护可以做到 \(O(n\log n)\)。

\(L<R\) 的情况是类似的,我们维护每个长度对应最值,再用一个堆维护不同长度谁最优就好了,复杂度仍然是 \(O(n\log n)\)。

CF1250I Show Must Go On

从大到小枚举 size,剩余部分与第一题处理方法类似。

P6646 [CCO2020] Shopping Plans

每一个种类分开讨论,剩余部分与第一题处理方法类似。

P2048 [NOI2010] 超级钢琴

比较简单的应用题,我们将一个结点定义为固定左端点,右端点为一段区间,每次取出最优的右端点将区间劈成两半塞入堆中即可,不需要三度化。

前 \(k\) 小子序列问题

题意:给定一个序列,求字典序前 \(k\) 小子序列的信息。

由于不好快速比较子序列的字典序大小,不能类似前面的题目用大堆合并全局信息。

我们仍然开 \(n\) 个堆,每个堆维护对应长度的子序列。信息记录最后一个位置以及其可以被替换成某个区间的元素,扩展方式有两种:类似上一题取出最小值劈开区间,或是在后面加入一个位置。

为了避免比较字典序,我们设计一种遍历方式:先采用第二种扩展方式,并转而考虑大小加一的堆,取完后继回溯时再采用第一种扩展方式,正确性显然。

复杂度 \(O(n\log n)\)。

P2483 【模板】k 短路 / [SDOI2010] 魔法猪学院

求出以 \(t\) 为根的最短路树,一条从 \(s\) 到 \(t\) 的路径可以被唯一地刻画为一个非树边序列(容易发现非树边序列相邻两条边 \(u,v\) 一定满足 \(u\) 的终点在 \(v\) 的起点的子树中)。

类似地,我们从状态空集开始,考察一个很朴素的生成方式:每次在非树边序列 pushback 一条新边。这一方法显然满足本文中算法要求的性质。

三度化后转移变为:

  • 在最后一条边后接上最优的一条边:一定是一条到根路径连出的 delta 最小边。
  • 将最后一条边替换成更大的一条:加入一条边后需要将其在这条路径上的后继加入决策。

使用可持久化可并堆维护,第一种转移平凡,第二种转移将其可并堆左右儿子加入决策即可,复杂度 \(O(m\log m)\)。

UOJ#53. 【UR #4】追击圣诞老人

注意到每个点的后继可以拆成不超过两条链,我们类似上一题从前往后扩展路径序列,信息记录可以参考超级钢琴一题,记录路径尾端,以及后继对应的链,每次取出链权值最小位置将链分成两部分重新加入堆即可,复杂度 1log。

标签:一条,浅谈,加入,短路,后继,问题,序列,复杂度
From: https://www.cnblogs.com/xiaoziyao/p/17477382.html

相关文章

  • eclipse中使用maven插件的有关问题:Updating index central|http://repo1.maven.org/m
    eclipse中使用maven插件的问题:Updatingindexcentral|http://repo1.maven.org/maven2问题产生如下:因为单位使用了过滤,访问Internet时,超过10M的内容就拒绝。因为maven插件在初始时,需要下载Maven的index文件,这个文件比较大,有38M多,下载不成功。所以造成使用Maven添加依赖项时(AddDep......
  • Java并发(十二)----线程应用之多线程解决烧水泡茶问题
    1、背景统筹方法,是一种安排工作进程的数学方法。它的实用范围极广泛,在企业管理和基本建设中,以及关系复杂的科研项目的组织与管理中,都可以应用。怎样应用呢?主要是把工序安排好。比如,想泡壶茶喝。当时的情况是:开水没有;水壶要洗,茶壶、茶杯要洗;火已生了,茶叶也有了。怎么办?办法甲......
  • 02-实际处理数据遇到的问题
    /*将某个文件夹中的全部文件,按以下两条规定重命名.一.如果文件名中含有'_'且'_'到'.'之间只有一位数,在这位数前面加'0'二.如果文件名中不含'_'且'.'前面只有一位数,在这位数前面加'0'程序目前存在无法解释的bug,当pAddress的路径和old,相同时文件名无法......
  • mac打开ddms卡住的问题解决
    https://blog.csdn.net/qq_35244415/article/details/110656444?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-110656444-blog-88994745.235^v38^pc_relevant_default_base&depth_1-utm_source=distribute.......
  • Uniapp下GoEasy通知栏推送不工作问题排查记录
    我们是uniapp开发的app,项目中的系统消息推送使用的是GoEasyWebsocket实时推送,上线一段时间后,客户反馈说,当app没有在前台运行时也需要想办法通知用户一些重要的系统通知。那么此时通知栏推送就需要集成了。集成通知栏推送很麻烦,国内一些公司做了一些插件来帮我们打通app跟厂商之......
  • UWB MAC层技术浅谈
    前言​ 对于大多数人来说,使用DW1000相关测距例程,按着教程实现简单的一对一测距不会有什么大问题。但当应用到实际场景后,现场环境同时出现几台,几十台设备时就会发现整套系统会出现严重的丢包、通信不良问题。而这其中的原因,是因为DW1000芯片只提供了UWBPHY层的实现,只完成了设备之......
  • 解决了yum 安装httpd的3001问题
    Repositorybaseislistedmorethanonceintheconfiguration查了各种资料,没解决,最后发现了错误原因(只是其中一种原因);   蓝色框:这些错误尝试各种解决仍无效。红色框:最后发现是yum被占用了。论看全部信息的重要性绿色框:果然yum被占用kill掉配置阿里源  wget-O......
  • vue中精确计算问题,出现很多位小数的问题与原因
    出现的原因计算机把小数转换成二级制,会出现无限循环的情况。再把无限循环的二级制转化成十进制的时候,变成了一个无限循环的数字。在处理双精度浮点数的小数部分最多支持52位,所以转换成十进制之后,就出现了很多位小数的存在。例如:0.1+0.2=0.300000000000000040.3-0.2=......
  • 数据库索引问题定位与分析
    数据库索引问题定位与分析一.数据库服务器添加慢查询配置1.my.cnf文件添加监控慢查询配置cd/etc/my.cnfvimy.cnf添加如下配置:slow_query_log=1long_query_time=0.012.重启数据库服务器systemctlrestartmysqld3.检查配置是否生效showvariableslike'%slow_query_......
  • 联合索引问题定位与分析
    联合索引问题定位与分析一.配置联合索引二.联合索引生效规则最左侧生效原则1.不生效情况Age在联合索引的第左侧,where字句中,没有用到age所以联合索引不生效2.部分生效情况Email在联合索引的最左侧,slq语句中有email字段,email生效3.联合索引都生效Sql语句中where字段与联合索引完全一致......