題目描述:給定一個代表電力網路的無向圖,每個節點是一個電站,邊代表電力線路並有維護成本。部分電站可能故障(需要維修)。需要找出維修所有故障電站的最小總成本:選擇一組邊使得所有故障電站至少與一個正常運作的電站相連。
解題思路:這可以看作一個修改版的最短路問題。將所有正常運作的電站作為源點,計算從它們到每個故障電站的最短距離(邊權為維護成本)。使用多源 Dijkstra:將所有正常電站以距離 0 加入最小堆,然後擴展到所有故障電站。每個故障電站的最短距離之和即為答案。
時間複雜度:O((V + E) log V) — 多源 Dijkstra,與單源 Dijkstra 複雜度相同。
空間複雜度:O(V + E) — 鄰接表和距離陣列。
1. Build adjacency list from edges 2. Identify faulty nodes (put in a set) 3. Multi-source Dijkstra: a. Initialize dist[i] = 0 for all non-faulty nodes, push them into min-heap b. Standard Dijkstra relaxation 4. Sum up dist[f] for all faulty nodes f 5. Return total (or -1 if any faulty node is unreachable)
Union-Find + 排序邊:按成本排序邊,貪心地加入邊直到所有故障節點都與某個正常節點連通。類似 Kruskal MST,但目標不同(不需要完整生成樹)。
BFS(無權圖):若所有邊權相同,可用多源 BFS 替代 Dijkstra,時間複雜度降為 O(V + E)。