建圖的一些技巧

9102700發表於2024-07-15

已經不止一次瞭解到建圖的技巧了, 例如:

  • 最大流建立超級源點,超級匯點
  • 建反圖,但已經忘了這個題是什麼時候的題了
  • 點權轉成邊權

2024/7/15 介紹點權轉邊權

如下所示,建立一個有 \(2N\) 個頂點和 \(N + M\) 條邊(成本只分配給邊)的有向圖,答案就是從頂點 \(1_\text{in}\) 到頂點 \(i_\text{out}\) 的路徑的最小成本。

  • 對於原始圖中的每個頂點 \(i\) ,建立兩個頂點 \(i_\text{in}\)\(i_\text{out}\) ,並新增一條代價為 \(A_i\) 的有向邊 \(i_\text{in} \to i_\text{out}\)
  • 為原始圖中的每條邊 \(u \leftrightarrow v\) 新增兩條代價相同的有向邊 \(u_\text{out} \to v_\text{in}\)\(v_\text{out} \to u_\text{in}\)

使用 Dijkstra 演算法可以在 \(O(M \log N)\) 時間內計算出最小成本。
這種方法也可用於其他目的。


相關文章