首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

UVa 515 差分約束系統:SPFA 算法完整解析

     編輯:關於C++

差分約束系統定義

形如 Xi - Xj ≤ c 的不等式組。解要麼無解,要麼無限多解(整體平移不變差值)。

圖論轉化

  • 每個變量 Xi ↔ 頂點 Vi
  • 不等式 Xi - Xj ≤ c ↔ 有向邊 Vj → Vi,權值 c
  • 引入超級源點 V0,連向所有點,權值 0
  • 求單源最短路徑,距離即為一組解

關鍵性質

  1. 最短路三角不等式 d(v) ≤ d(u) + w(u,v) 恰好對應差分約束
  2. 負權環 ⇔ 無解
  3. 固定源點距離為 0 時,求得的解使所有變量取最大值
  4. 求最小值需轉為最長路(初始化 -∞,邊權取反)

SPFA 實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved