模板:k短路(可并堆)

所谓k短路,就是第k短的路。

(逃)

解析

给出一个有向图,求 s−ts-tst 的不严格第 k 短的路径。

A*算法

对于一个状态 (x,cost)(x,cost)(x,cost),即到 xxx 时走过长度为 costcostcost,定义一个估价函数:
f=cost+dis(x,t)f=cost+dis(x,t)f=cost+dis(x,t)
以这个为关键字维护优先队列,当 ttt 被访问到第 kkk 次时的估价函数即答案。
最差时间复杂度可以卡到 O(nklog⁡(n))O(nk\log (n))O(nklog(n))

可持久化可并堆

先在反图任意找到一棵最短路径树
任意一条路径都由若干条树边和非树边组成,每条非树边导致的额外代价是 disv−disu+wdis_v-dis_u+wdisvdisu+w
对于相邻两条非树边 x,yx,yx,yyyy 的起点必然是 xxx 的终点的祖先或本身。
对于任意一个符合该性质的合法非树边集合,都能双射到一条合法路径上,所以问题就转化成了找到权值第 kkk 小的集合。
还是维护一个优先队列,记录最后一条边的终点和集合总权值。每次弹出队首时,能出现两种新的状态:

  1. 最后一条边被替代成合法且权值比它大的权值最小的边。
  2. 在祖先新增一条权值最小的合法边。

可以对于每个节点维护一个堆,存储起点在自己及其祖先的所以非树边,即可实现2。
对于1,我们直接把其对应的堆节点的左右儿子加入即可。
时间复杂度 O((n+m)log⁡m+klog⁡k)O((n+m)\log m+k\log k)O((n+m)logm+klogk)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大鱼吃小鱼(fhq-treap/线段树二分+贪心)

大鱼吃小鱼descriptionsolutioncodedescription 《大鱼吃小鱼》是一款经典的儿童益智类游戏,在游戏中,玩家所操控的“大鱼”只能吃掉体积严格小于自己的“小鱼”,然后玩家所操控的“大鱼”的体积就会增加“小鱼”的体积这么多的量。 知名主…

Acwing 1081. 度的数量(以及本人对数位dp的浅薄理解)

题意: 求给定区间 [X,Y] 中满足下列条件的整数个数:这个数恰好等于 K 个互不相等的 B 的整数次幂之和。 题解: 数位DP 技巧1:[X,Y]>f(Y)-f(X-1) 技巧2:用树的方式来考虑。 在本题中,题意是问[X,Y]中…

EFCore动态切换Schema

最近做个分库分表项目,用到schema的切换感觉还是有些坑的,在此分享下。 先简要说下我们的分库分表分库分表规则我定的规则是,订单号(数字)除以16,得出的结果为这个订单所在的数据库,然后他的余数…

YBTOJ:工作评估(分块)

解析 首先想想 O(nm)O(nm)O(nm) 怎么做。 从左往右扫,不断把当前值和 x0x_0x0​ 取 max⁡\maxmax 即可。 考虑正解: 设 f(l,r,w)f(l,r,w)f(l,r,w) 为初始为 www,工作区间为 (l,r)(l,r)(l,r) 结束后的价值,s(l,r)∑ilrais(l,r)\s…

黑客(续) (压位高精+状压dp)

黑客(续)descriptionsolutioncodedescription 【问题描述】 在破解了世界首富 Bychaha 的银行账户后,知名黑客 pks 发现,要得到 Bychaha 的全部财产,必须再破解一道密码。 作为客户账户安全的最后一道防线&#xff0…

东莞.NET俱乐部线下技术沙龙-活动报名

自广州.NET技术俱乐部在2018年12月08日线下活动顺利开展后,东莞作为兄弟城市,也想通过线下活动的方式,点燃东莞.NET技术的熊熊之火。现决定先借助广州、深圳兄弟城市的帮助下,开展一场东莞方主办的线下活动,聚集东莞本…

Acwing 1084. 数字游戏 II

Acwing 1084. 数字游戏 II 题意: 指定一个整数闭区间 [a.b],问这个区间内有多少个取模数。 取模数:这种数字必须满足各位数字之和 mod N 为 0。 题解: 数位dp 这里不细讲数位dp了,可以看看 Acwing 1081. 度的数量&…

ybtoj洛谷P3268:圆的异或并(扫描线)

解析 很神奇的一道题。 关键条件:任意两个圆无交。 把一个圆分成上下两个圆弧,那么所有圆弧的高度关系不会发生变化。 所以可以开一个 set,维护一个从左往右扫的扫描线,按照当前扫描线的横坐标定义比较符号,在圆的最…

如何撰写较受欢迎的技术文章

本来我这篇文章的标题是 “如何撰写受欢迎的技术文章”,但反复斟酌之下,还是加了一个“较”字,这主要是考虑我不是什么知名作者,写的文章大多也谈不上很受欢迎,贸然地谈“受欢迎” 是有点忐忑的,而改成现在…

朝鲜时蔬(分数据点写算法+毒瘤数学)

朝鲜时蔬decriptionsolutioncodedecription 对于一个有穷非空正整数集合S{x1,x2,x3,...,xn}⊂N(n≥1)S\{x_1,x_2,x_3,...,x_n\}\subset N^(n\ge 1)S{x1​,x2​,x3​,...,xn​}⊂N(n≥1),定义其和sum(S)sum(S)sum(S)为所有元素的和 sum(S)x1...xnsum(S)x_1...x_nsum…

洛谷P7515:矩阵游戏(差分约束)

解析 如果没有元素均要在 [0,1e6][0,1e6][0,1e6] 的条件,可以很容易的构造出一个合法解。 那么我们就要通过调整得到的解,使所有数都在合法范围内。 注意到,每次给某一行/列依次1,-1,1,-1…这样仍然符合要求。 让每一行/列错开,…

Recursive sequence HDU - 5950

Recursive sequence HDU - 5950 题意&#xff1a; 给你一个式子&#xff1a;f[n]2f[n-2]f[n-1]n4 给你f[1]和f[2]&#xff0c;给你一个n&#xff0c;求f[n] f[1],f[2],n<231 题解&#xff1a; 很明显&#xff0c;矩阵快速幂&#xff0c;但是太久没做这种题&#xff0c;我…

使用Http-Repl工具测试ASP.NET Core 2.2中的Web Api项目

今天&#xff0c;Visual Studio中没有内置工具来测试WEB API。使用浏览器&#xff0c;只能测试http GET请求。您需要使用Postman&#xff0c;SoapUI&#xff0c;Fiddler或Swagger等第三方工具来执行WEB API的完整测试。在ASP.NET Core 2.2中&#xff0c;引入了一个名为“http-r…

洛谷P7518:宝石(倍增、可撤销并查集)

解析 算法一 定义 upx,kup_{x,k}upx,k​ 为节点 xxx 从自己的颜色所在位置在返祖链上往后跳 2k2^k2k 个颜色到达的节点。 可以像倍增一样的求解。 这样对于一次询问 (s,t)(s,t)(s,t) 我们就能求出 (s,lca)(s,lca)(s,lca) 这一段能取到哪里了。 对于向下的情况&#xff0c;再处…

E - Counting Cliques HDU - 5952

E - Counting Cliques HDU - 5952 题意&#xff1a; 给你n个点&#xff0c;m个边&#xff0c;还有一个s&#xff0c;问这个图中有多少个等于s的点集可以组成一个完全图 题解&#xff1a; 这题。。直接暴力搜索就行 分析复杂度的时候&#xff0c;应该考虑只有1000条边&#…

Docker最全教程之使用TeamCity来完成内部CI、CD流程(十七)

本篇教程主要讲解基于容器服务搭建TeamCity服务&#xff0c;并且完成内部项目的CI流程配置。教程中也分享了一个简单的CI、CD流程&#xff0c;仅作探讨。不过由于篇幅有限&#xff0c;完整的DevOps&#xff0c;我们后续独立探讨。 为了降低容器的使用门槛以及便于大家将容器技…

2021牛客NOIP提高组第二场T2——方格计数(组合数计数)

方格计数descriptionsolutioncodedescription 在左下角是 (&#x1d7ce;, &#x1d7ce;)&#xff0c;右上角是 (W, H)的网格上&#xff0c;有 (W 1) (H 1) 个格点。 现在要在格点上找 N个不同的点&#xff0c;使得这些点在一条直线上。并且在这条直线上&#xff0c; 相邻…

Acwing 1085. 不要62

Acwing 1085. 不要62 题意&#xff1a; 问[n,m]这些数中有多少数不包含4&#xff0c;且不包含连续的62 题解&#xff1a; 经典数位dp&#xff0c;分析过程以前的数位dp博客有写 Acwing 1082. 数字游戏 代码&#xff1a; #include<bits/stdc.h> #define debug(a,b) …

ybtoj洛谷P4406三角形面积并(扫描线)

解析 暴力求出所有三角形之间的所有交点&#xff0c;提出所有的横坐标。 然后任意两个相邻的横坐标之间的面积都是若干个梯形。 那么就可以求出对于每一个横坐标截得的三角形长度的并的和&#xff0c;然后加在一起乘高除以二即可。 在这里插入代码片#include<bits/stdc.h&…

自动将 NuGet 包的引用方式从 packages.config 升级为 PackageReference

在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj&#xff0c;不过全过程是手工进行的&#xff0c;而且到最后处理 XAML 问题也非常头疼。现在&#xff0c;我们可以利用工具自动地完成这个过程。…