最短路径问题的变种真的是层出不穷,本羸弱已经写了不少了,先写一篇总结,之后慢慢加吧
生成树模板题
多源点最短路径优化
一般我们使用Floyd算法计算所有点之间的最短路径,但是复杂度很高,在这道题这里显然是不行的。这时候需要一个小技巧:反向建图,将多个点到一个点的最短路径转化为单个点到多个点的最短路径。题解
行走次数有限的最短路径
与普通的最短路径问题不同,这类题的限制在于路径的数目不能超过某个值
n
n
n,而且本题还有另一个难点,如何决定在哪条路径上使用哪一个车票。这类题组合数非常之多,一般考虑将限制因素用整数表示为集合,
题解
TSP问题
TSP问题与一般最短路径的问题在于经过每个顶点恰好一次,并且最终回到起点这个约束,对于这个问题,我们一般采用状态压缩DP的思想,将经过的点集化为集合,用
d
p
[
S
]
[
v
]
dp[S][v]
dp[S][v]表示经过了
S
S
S中的所有点,处于
v
v
v点时,访问剩余所有节点需要的总权重,然后记忆化搜索即可
无向图前k条不重叠最短路径
对于这种题,与一般最短路径不同的就是要求多条最短路径,一般的做法是使用最小费用流的模板来解决这种问题,每条边的长度为
c
i
c_i
ci,最大流
f
i
=
1
f_i=1
fi=1,在图中求流量为
k
k
k的最小费用,即前
k
k
k条最短路径的总长度。题解,最小费用流详解+模板