删边最短路学习笔记

本文详细介绍了删边最短路的理论和技术,包括无向图的算法流程、引理证明、时间复杂度分析,并提供了相关例题,强调了在有向图上应用的困难。文章适合对图论和最短路径算法感兴趣的读者。
摘要由CSDN通过智能技术生成

删边最短路

前言

删边最短路是一种科技,用于解决一类问题:

给定非负权图 \(G = (V, E)\)。设 \(n = |V|\),保证 \(1\) 可达 \(n\)

\(\Delta(e)\) 为图 \(G' = (V, E \setminus \{e\})\)\(1 \rightsquigarrow n\) 的最短路,若 \(G'\)\(1\) 不可达 \(n\) 则为 \(+\infty\)

对每个 \(e \in E\),求出 \(\Delta(e)\)

点的编号不影响什么,源点和终点可以随便给,这里给 \(1\)\(n\) 是为方便。

我将删边最短路称为科技,是因为删边最短路的整个流程逻辑链相对复杂,难以想到,重在积累。

所以本文只会描述删边最短路科技的过程以及必要的证明,而不会阐述一些东西是怎么想到的。

前置知识:最短路树的定义与构建。

本文中 \(w(e)\) 代表边 \(e\) 的权值,\(w(u, v)\) 代表 \((u, v)\) 这条边的权值,\(w(P)\) 代表路径 \(P\) 的权值。

同时请注意“最短路”和“最短路径”的差别,前者指的是长度,后者指的是路径。

无向图

即保证 \(G\) 是无向的。

这里再加一个限制条件:\(G\) 是联通图,可以简化讨论。

\(G\) 不是联通图的情况,显然除了 \(1\)\(n\) 所在联通块,其他联通块可以直接忽略。

前提记号

\(G\) 的以 \(1\) 为根的任意一棵最短路树 \(T\),并从 \(T\) 上找到 \(1 \rightsquigarrow n\) 的路径,设为 \(P\)

注意,\(1 \rightsquigarrow n\) 的最短路径可能有很多,这里 \(T\) 上的那条 \(1 \rightsquigarrow n\) 的路径和 \(P\) 必须是原图上同一条最短路径。

\(P = p_0(=1) \xrightarrow{E_1}p_1 \xrightarrow{E_2}p_2\xrightarrow{E_3}\cdots\xrightarrow{E_k}p_k(=n)\)\(V_P = \{p_i\}\)\(E_P = \{E_i\}\)\(D = w(P) = \sum E_i\)

显然,从 \(T\) 上选出的 \(1 \rightsquigarrow n\) 最短路径一定是简单的(不包含零环),因此上面的 \(p_i\)\(E_i\) 都互不相同。

原图上 \(1 \rightsquigarrow u\),以及 \(u \rightsquigarrow n\) 之间可能有许多条最短路径,那么这里我们规定:

  • 给定 \(u\),对于 \(1 \rightsquigarrow u\) 的最短路径,指的是 \(T\)\(1 \rightsquigarrow u\) 这段路径代表的最短路径,设为 \(P(1, u)\)
  • 给定 \(u\),对于 \(u \rightsquigarrow n\) 的最短路径,指的是 \(T\)\(u \rightsquigarrow n\) 这段路径代表的最短路径。设为 \(P(u, n)\)
  • 同时,设 \(D(1, u) = w(P(1, u))\)\(D(u, n) = w(P(u, n))\)
  • 于是事实上,\(P\) 可以看做 \(P(1, n)\) 的简写;\(D\) 可以看做 \(D(1, n)\) 的简写。

另外,对于任意 \(u \in V_P\),记 \(u\)\(p\) 上的下标为 \(\mathrm{id}(u)\)。即,\(p_{\mathrm{id}(u)} = u\)

引理

\(\mathbf{Lemma\ 1}\) 对于任意 \(\boldsymbol{e \not\in E_P}\)\(\boldsymbol{\Delta(e) = D}\)

删除 \(e\) 不会影响最短路径 \(P\),也不可能凭空生成一条距离更小的路径,因此 \(1\)\(n\) 的最短路仍然是 \(D\)

这个引理告诉我们,只需关心 \(e \in E_P\)\(\Delta(e)\) 即可。

\(\mathbf{Lemma\ 2.1}\) 对于任意 \(\boldsymbol {u \ne v}\)\(\boldsymbol{P(1, u)}\)\(\boldsymbol{P(1, v)}\) 只会共享一段前缀(可以只有 \(\boldsymbol 1\) 一个点),然后走互不相交的道路。

\(\mathbf{Lemma\ 2.2}\) 对于任意 \(\boldsymbol{u \ne v}\)\(\boldsymbol{P(u, n)}\)\(\boldsymbol{P(v, n)}\) 只会共享一段后缀(可以只有 \(\boldsymbol n\) 一个点),之前一定走互不相交的道路。

\(\mathbf{Lemma\ 2.3}\) 对于任意 \(\boldsymbol{0 \le i \le k}\)\(\boldsymbol{P(1, p_i)}\)\(\boldsymbol P\) 的一段前缀,\(\boldsymbol{P(p_i, n)}\)\(\boldsymbol P\) 的一段后缀。

\(P(1, u)\)\(P(1, v)\)\(P(u, n)\)\(P(v, n)\) 都是从最短路树上摘出来的。

根据树的性质,自然有 \(1\)\(u\) 的路径和 \(1\)\(v\) 的路径只共享一段前缀,然后分叉。\(u\)\(n\) 的路径和 \(v\)\(n\) 的路径同理。

第三条是因为在 \(T\) 上,\(p_i\)\(1\)\(n\) 之间的链上。

\(\mathbf{Lemma\ 3.1}\) 一条最短路径的任意一段子路径,也是一条以这条子路径两端为源点和终点的最短路径。

一条最短路径 \(P'\) 的任意子路径 \(Q\) 也是一条最短路径。否则,若存在长度比 \(Q\) 短(且源点终点相同)的另一路径 \(Q'\),则 \(P’\) 可以将自身的子路径 \(Q\) 替换为 \(Q'\) 从而生成更短的路径,与 \(P'\) 是最短路径矛盾。

\(\mathbf{Lemma\ 3.2}\) 对于 \(\boldsymbol{e \in E_P}\),删除 \(\boldsymbol e\) 后,\(\boldsymbol 1\)\(\boldsymbol n\) 若可达,则存在一条 \(\boldsymbol 1\)\(\boldsymbol n\) 的简单最短路径,满足该路径从 \(\boldsymbol 1\) 开始,先跟 \(\boldsymbol P\) 共享一段前缀(可以只有 \(\boldsymbol 1\) 一个点),然后腾空一段绕过 \(\boldsymbol e\)(期间与 \(\boldsymbol P\) 无交),最后和 \(\boldsymbol P\) 共享一段后缀(可以只有 \(\boldsymbol n\) 一个点)到达 \(\boldsymbol n\)

删除 \(e\)\(1\) 仍可达 \(n\),则随便生成一条最短路径 \(Q'\)(若可达,则一定存在最短路径)。

考虑删除 \(Q'\) 上的全部零环,就可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值