先把 \(S-T\) 的最短路先求出來然後我們叫這條路徑為 \(P\)
你現在就只在乎把 \(P\) 上面拔掉後的最短路是多少
為了方便先假設全點對最短路唯一
假設我們用個資料結構 維護一下 把\(P\)上第 \(i\) 個點拔掉後的最短路
定義 \(F(X)\) 為 走 \(S\to X\) 最短路 會經過 \(P\) 上最後面的一個點
\(FD(X)\) 為 \(S\to X\) 最短路長度
定義 \(G(X)\) 為走 \(T\to X\) 最短路 會經過 \(P\) 上最前面的一個點
\(GD(X)\) 為 \(X\to T\) 最短路長度
那考慮以下三種狀況
\(S\to A\to B\to T\)
此時 \(S\to A\) 會走最短路 且 \(B\to T\) 會走最短路
並且 \(A-B\) 恰為一條邊
如果我們直接枚舉 \(A, B\)
那這時候就可以更新 \((F(A), G(B))\) 區間為 \(len(A, B) + FD(A) + GD(B)\)
\(S\to A\to T\)
此時 \(S\to A\) 會走最短路 且 \(A\to T\) 會走最短路
那這時候可以更新 \((F(A), G(A))\) 區間為 \(FD(A) + GD(A)\)
最後一個比較特別的狀況
考慮現在拔掉 \(P\) 上第 \(y\) 個點
那你發現唯一剩下的 case 就是
\(S\to A\) 走不經過 \(y\) 最短路
\(A\to T\) 走不經過 \(y\) 最短路
然後考慮 \(F(A) = y, G(A) = y\)
那就想辦法把所有點都跑去跑個最短路 對於 \(i\) 得到 \(S\to i\) 不經過 \(F(i)\), 的最短路
和 \(i\to T\) 不經過 \(G(i)\) 的最短路 就可以解決這個 case
以下是證明為什麼 case 1, 2, 3 就會包含全部的 case
考慮候選路徑 \(Q\) 為一條可能為最後答案的路徑
為了方便順便把點重新編個號
在 \(P\) 上面第 \(i\) 個點就改成編號 \(i\)
所以 \(S\) 的編號是 \(1\), \(T\) 的編號是 \(|P|\)
並假設 \(Q\) 是在拔掉 \(y\) 點狀況下的候選路徑
那考慮邊 \((a, b)\) 為 \(Q\) 上第一條非 以\(S\)為源點 的最短路徑樹上的邊
以及邊 \((c, d)\) 為 \(Q\) 倒數第一條非 以T為源點 的最短路徑樹上的邊
那如果 \((a, b)\) 不存在的話 case 1 會處理到
這時候有些性質是可以用的
那如果 \(F(b) > y\) 或是 \(G(c) < y\) 就會發現 case 1 會處理到
所以接下來只剩下 \(F(b) = G(c) = y\) 而且
對於所有 \(u\) 在路徑 \(b-c\) 上面都會滿足 \(F(u) = G(u) = y\) 的 case
不然就會被 case 1 處理到
那這個 case 就會在 case 3 被處理掉
最後就是在如果沒有 "全點對最短路唯一" 的狀況
唯一不同的是 \(F(X)\) 變成了一個 set, \(G(X)\) 也是
那這時候就發現 留下最小的 \(F(X)\), 最大的 \(G(X)\) 就足夠了
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing