差分約束系統 最短路徑演算法的應用

2021-10-24 22:19:48 字數 558 閱讀 4605

差分約束系統是一種特殊的n元一次不等式組,它包含n個變數x1~xn以及m個約束條件,每個約束條件都是由兩個變數做差構成,形如xi-xj<=ck,其中ck是常數(可以是負數也可以是非負數),1<=i,j<=n,1<=k<=m.我們要解決的問題是求一組解,x1=a1,x2=a2,x3=a3,…,xn=an,使得所有條件都得以滿足。

差分約束系統的每乙個約束條件xi-xj<=ck可以變形為xi<=xj+ck。這與單源最短路問題中的三角不等式dist[y]<=dis[x]+z非常相似。因此可以把每個變數xi看作有向圖中的乙個結點i,對於每乙個約束條件xi-xj<=ck,從節點j到i的一條長度為ck的有向邊。

注意到,如果為一組解,那麼對任意的常數d,也是一組解(做差後d正好被消掉)。

設dist[0]=0,以0為起點求單源最短路。若圖中存在負環,則給定的差分約束系統無解。否則,xi=dist[i]就是差分約束系統裡的一組解。

在某些題目中,約束條件為形如xi-xj>=ck.我們仍看作是從j到i連成長度為ck的有向邊,只是改為計算單源最長路,如圖中存在正環則無解。當然我們也可以把約束條件轉換成xj-xi<=-ck,再按照單源最短路進行計算。

2018 08 07 最短路徑 差分約束

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n表示成都的大...

差分約束系統 變相的最短路

之前沒有細看,想不明白這個問題怎麼和最短路扯上關係,細細看了看,也沒明白,原因是在看dijk演算法的時候就沒好搞明白它的 實現,以至於這個問題模擬到最短路實現的時候一臉懵,還去瞅了瞅三角不等式是什麼東西,簡單來說,難就難在圖的構造上面,構造好圖之後就是模板,就是之前的內容了,一起看看這個東西吧,on...

K Candies 差分約束 最短路)

有n個孩子,m個關係 關係分別有3個數u,v,w。代表v的糖果數不能多於u w個,也就是dis v dis u w 這就轉換成 if dis v dis u w dis v dis u w.1 spfa stack include include include include includecon...