題意:若干人開車去公園聚會,公園停車位 k 個。人們可先開車到他人家停車,再拼車去公園。車容量無限,家庭停車位無限。求最小總行程。等價於:求最小生成樹,但公園節點度數 ≤ k。
步驟 4 朴素 O(n²) 會 TLE。優化:預計算每個節點到公園路徑上(不含公園直連邊)的最大邊權 MaxEdge[i]。添加邊 (park, i) 時,增量 = cost(park,i) - MaxEdge[i]。選增量最小者。更新後需重新計算受影響節點的 MaxEdge(僅路徑上節點)。
// Prim 建立初始森林
// 并查集或 father[] 記錄樹結構
// Best(i) 遞歸求 i 到公園路徑上最大邊對應節點
// 主循環:for (deg=cnt+1; deg<=k; ++deg) {
// 遍歷所有節點找最小增量
// 更新答案、斷開最大邊、連接新邊、更新 father/MaxEdge
// }
Prim O(n²),優化後度數增加階段 O(k·n) ≈ O(n²),總體 O(n²) 可接受(n≤111)。