無向圖 n≤20,000 點,m≤100,000 邊,起點 1,終點 n。找出所有「重要道路」:刪除後從 1 到 n 的最短路長度增加(或不可達)。
將最短路圖視為無向圖,橋(割邊)即為重要道路。因為刪除橋會斷開連通性,導致無法從 1 到 n 或最短路變長。
最短路圖是 DAG(有向無環圖)。按拓撲序遍歷,維護全局變量 diff = 當前點的出度 - 入度(在已遍歷子圖中)。若某點的 diff == 1,則其出邊為關鍵邊。原理:該邊是連接前半部分和後半部分的唯一通道。
// 1. Dijkstra 求最短路 // 2. 建立最短路 DAG // 3. 方法一:Tarjan 找橋 // 4. 方法二:拓撲序 + diff 計數 // 5. 輸出重要邊的原始索引