筆記 差分約束系統

2022-04-29 05:21:09 字數 1669 閱讀 4509

是個啥???

如果乙個系統由 \(n\) 個變數和 \(m\) 個約束條件組成,形成 \(m\) 個形如 \(x_i - y_i \leq k\) 的不等式( \(i,j \in [ 1 , n ]\) ,\(k\) 為常數),則稱其為差分約束系統( \(system\)

\(of\)

\(difference\)

\(constraints\))。

亦即,差分約束系統是求解關於一組變數的特殊不等式組的方法。

說句人話就是:

差分約束系統就是給出一些形如 \(x - y \leq b\) 不等式的約束,問你是否有滿足問題的解,或者求最小最大解

這類問題的 \(nb\) 之處就是可以轉化為圖論的最短路問題。

\[x_i - x_j \leq a_k

\]\[x_i \leq x_j + a_k

\]令 \(a_k = w(j,i)\) ,則有

\[x_i \leq x_j + w(j,i)

\]令 \(i = to\) , \(j = from\) , \(x = dis\) ,則有

\[dis_ \leq dis_ + w(from,to)

\]\(spfa\) 中的乙個鬆弛操作:

if(dis[to] > dis[from] + w(from,to))

dis[to] = dis[from] + w(from,to)

就是使 \(dis_ \leq dis_ + w(from,to)\) 。

so~ 就可以針對每個 \(i\) 和 \(j\) 節點,建一條權值為 \(a_k\) 的有向邊,然後連圖,求 \(x_ - x_1\) 的最大值就是求節點 \(1 \to n\) 的最短路。

有 \(x_i ? x_j \leq k\) 的一堆不等式。

轉化為單源最短路中三角不等式 \(dis_i \leq dis_j + k\) 的形式,從 \(j\) 向 \(i\) 連一條權值為 \(k\) 的單向邊。

建立超級源點,與各點距離為 \(0\),跑最短路。

若有負環則無解,否則最短路即為一組合法解。

合法解同加 \(\delta\) 仍為合法解。

就是這麼個玩意

然後

\(b - a \leq c\) ①

\(c - b \leq a\) ②

\(c - a \leq b\) ③

我們想要知道 \(c - a\) 的最大值,通過 ① \(+\) ②,可以得到 \(c - a \leq a + c\) ,所以這個問題其實就是求 \(min(b , a + c)\)

三角不等式推廣到 \(m\) 個,變數推廣為 \(n\) 個,就變成 \(n\) 個點 \(m\) 條邊的最短路問題。

luckyblock 殺人啦。。。kersen 也殺人啦。。。

bool spfa_bfs(int st)}}

}return false;

}

未完待續,持續更新~

學習筆記 差分約束系統

目錄將邊權取相反數,設此時圖為 g 若 g 無負權環 即 g 無正權環 則有 d v le len v 其中 d v 為在圖 g 上求得的最短路,len v 為源點到 v 的任意路徑權值和。同時可得 d v ge len v 所以可以得到 d v d v 其中 d v 為原圖源點到 v 的最長路。實...

差分約束系統

差分約束 若 s a s b k 建一條b到a 的長度為k的邊 若s a s b k 建一條b到a 的長度為 k的邊 是求最小值的最長路 是求最大值的最短路 注意到最短路演算法的鬆弛操作 if d j d i w i j d j d i w i j 這其中的三角形不等式 d j d i w i j ...

差分約束系統

差分約束系統 對於差分不等式,a b c 建一條 b 到 a 的權值為 c 的邊,求的是最短路,得到的是最大值 對於不等式 a b c 建一條 b 到 a 的權值為 c 的邊,求的是最長路,得到的是最小值 存在負環的話是無解 求不出最短路 dist 沒有得到更新 的話是任意解 第三 一種建圖方法 設...