首页 > 其他分享 >最短路与次短路

最短路与次短路

时间:2023-09-25 22:15:46浏览次数:35  
标签:end 严格 短路 路径 start 最小值

最短路算法不再赘述,假定我们已经求出了最短路,记 \(f[x, y]\) 为 \(x\) 到 \(y\) 的最短路。

记 \(g[x, y]\) 为 \(x\) 到 \(y\) 的严格次短路。


最短路树的定义

单源最短路问题中,如果p1->p2->p3->...pn是一条最短路,就将它的边都加入图中。

将所有的最短路径都这样处理,得到的图就是最短路树。

最短路和次短路的性质

假定图中不存在0环(有的话,0环不影响路径长度,对于只求长度的题无影响;有0环,路径有无数条,不可能求方案,对求方案数的题也无影响)。

  • 任何一条最短路的路径中,一定不经过重复的点。

假设出现了,那就是一个环,因为没有0环和负环,去掉之后一定更小,与它是最短路径矛盾。

  • 任何一条次短路中,重复的点出现的次数一定不超过2次

同样,如果出现了至少3次,那么就会出现多于2个正环。全部正环去掉之后,就是最短路径;只保留一个正环,此时路径长度(记为 \(cur\))严格大于最短路径;而此路径上有两个正环,它一定大于 \(cur\)。

也就是存在一个路径 \(x\) ,使得最短路 \(d < x < y\),那么 \(y\) 肯定就不是次短路了,因为次短路是除了最短路外最小的一条路径。

这些性质也许有用,也许没用

严格次短路的求法

我们将最短路树(就是那个DAG)建出来,设为 \(G\)。

那么,非最短路径一定有一条边不在 \(G\) 中

假设所有边都在 \(G\) 中,而最短路树保证了走到每个点的路径长度都是起点到它的最短路,这就与此路径为非最短路径矛盾。

我们要求的就是所有非最短路径的长度构成的集合 \(S\) 中的最小值。

将 \(S\) 按照从起点出发,第一条不在 \(G\) 中的边 分类。

假设当前求的是从起点出发,第一条不在 \(G\) 中的边是 \((u, v)\) 的最小值。

需要注意,不论是无向图还有有向图,走的路径都是有顺序的,所以 \(G\) 中都是有向边。

条件限制了一定经过 \((u, v)\) 而从起点到 \(u\),从 \(v\) 到终点的走法都是相对独立的,因此此子集的最小值就是 \(f[start, u] + w(u, v) + f(v, end)\)。

枚举每一条不在 \(G\) 中的边 \((u, v)\),\(S\) 的最小值就是 \(f[start, u] + w(u, v) + f(v, end)\) 的最小值。

这样就求出了次短路。

非严格次短路的求法

先求出严格次短路。

将起点到终点的所有路径的长度的集合设为 \(S\)。

那么 \(S = \{f[start, end], f[start, end], ... , f[start, end], g[start, end], ...\}\)

也就是在 \(G\) 里判断一下终点的来边是否有超过1条。

如果只有1条来边,非严格次短路就是严格次短路;
如果有超过1条来边,非严格次短路就是最短路。

例题

P2865 [USACO06NOV] Roadblocks G 裸的严格次短路。

P2829 大逃离

题目描述有问题

根据题意把走不到的点删掉,求严格次短路即可。

假如,我是说假如,题目中的最短路是可以走连接的点小于 \(k\) 的点,但是次短路不行,这样的严格次短路该怎么求呢?

假设原图的最短路树是 \(G\),删去不可达点后的图的是 \(G'\)。

同样枚举每条不在 \(G\) 中的边,但是 \(f[start, u]\) 应当是 \(G'\) 中的最短路(分析见上)。

注意:此时判断一条边是否为 \(G\) 中的边,要用原图的 \(f\) 来判断,但是计算的式子,要用 \(G'\) 的 \(f\) 来求。

标签:end,严格,短路,路径,start,最小值
From: https://www.cnblogs.com/zhangchenxin/p/17728955.html

相关文章

  • P7916 [CSP-S 2021] 交通规划 sol-最短路+环形dp
    P7916[CSP-S2021]交通规划solStatement传送门Solution好题。发现\(k\le2\)的分值非常多,于是我们考虑从\(k=2\)入手。颜色相同就不用说了,直接染成同一种颜色就行了。我们考虑其他情况,就是颜色不相同的情况,我们一定是找了一条路径把这个图给切开了就像这个样子。......
  • 最短路基础实现方法模板合集
    $\color{#39c588}{关于最短路}$$\color{purple}{首先是最短路的算法选择思路捏,直接来个Y总的图}$++$\color{purple}{单源汇问题}$++$\color{orange}{朴素版Dijkstra}$实现思路//朴素版Dijkstrao(n^2)--处理稠密图--稠密图用邻接矩阵存储//1.初始化邻接......
  • 同余最短路
    简述:完全背包,但物品质量很大(105左右),空间上第二维开不下,时间上狠狠超时,咋办呐,同余最短路咯(不小心学到的)  先简写f[(i+aj)%m]=min( f[(i+aj)%m],f[i]+aj)类比最短路Dijkstra咋求的d[y]=min(d[y],d[x]+vx,y)sox->i,y->(i+aj)%m,x->y建一条有向边,最......
  • 最短路之Floyd(医院设置)
    题意题目链接:https://www.luogu.com.cn/problem/P1364给一个二叉树,每个结点有一个值,这个值代表这个结点(即城市)有多少人,然后需要在这些结点中选出一个结点作为医院,问选哪个结点得到的距离和最小。距离和为人数乘以路径长度。思路用最短路,就是先求出每两个点之间的最短......
  • 20-布尔值-比较运算符-逻辑运算符-短路问题
            ......
  • 逻辑操作符的短路现象
    (逻辑操作符的短路现象)1.逻辑操作符&&逻辑与||逻辑或&&是操作符两侧表达式同时为真时,才为真;只要有一个假,结果就为假||是操作符两侧表达式同时为假时,才为假;只要有一个真,结果就为真这里十分容易理解,所以不多说2.逻辑操作符的短路这里看几个例子就可理解:&&的......
  • 关于单位权图最短路的一些小思考
    关于单位权图最短路的一些小思考单位权图每条边权值都为\(1\)(或者全部相同也行)的图。最短路显然,单位全图的最短路不会经过同一个点,所以,跑单位权图的最短路要用BFS。所以我们得到一个处理单位全图的性质\(1\):用一个标记数组取标记哪个点有没有被走过,如果没有就标记并加入......
  • 最短路
    dijkstra(好像有问题)单源最短路,原理比较简单,就是贪心。每次选取最近的边(没选过),用它去更新其他的。传统做法是每次扫一遍寻找最近的遍,其实可以用堆优化。voiddijkstra(ints){q.push(JCY{s,0});for(inti=1;i<=n+n;i++){num[i]=0x3f3f3f3f;//有因为最......
  • 最短路
    基本算法:\(dijkstra\)使用条件:无负权边每次取出还未取出过的\(dis\)最小的节点更新其他节点正确性证明:因为是\(dis\)最小的节点,别的节点不可能有一条路径走到这个节点且\(dis\)更小(路径为正)stl-pq默认是大根堆,用负号处理为小根堆intn,m,s,tot;inthead[N],ver[M......
  • LED摩托车灯降压恒流IC内置mos管AP5192短路保护
    AP5192是一款PWM工作模式,高效率、外围简单、内置功率MOS管,适用于4.5-100V输入的高精度降压LED恒流驱动芯片。最大电流1.5A。AP5192可实现线性调光和PWM调光,线性调光脚有效电压范围0.55-2.6V.AP5192工作频率可以通过RT外部电阻编程来设定,同时内置抖频电路,可以降低对其他设备的E......