在做poi的時候看到一題要用到差分約束的..
然後就興致勃勃的去學習了差分約束..
結果發現那一題只是運用到了差分約束系統的性質而已.. 然後套個tarjan++floyd
所以並沒有什麼卵用..
舉個比較簡單的例子吧..
n 個數,
m條限制,每條限制dj
−di≤
a ,然後求是否存在這麼個序列..
那麼就把式子化一下dj
≤di+
a ,那麼這就是個spfa最短路的模型了..
如果該圖存在負環,那麼就表示並不會存在這麼個序列..
題意:有乙個n×
m 的矩陣,問你能不能通過把同一行或同一列乘乙個數或者除以乙個數,使得最後每個數都屬於[l
,u] ..設a
i 為第
i 行乘的數,bj
為第j列除以的數..
那麼對於乙個ci
,j,就有l≤c
i,ja
ibj≤
u ..
然後同時除以ci
,j,得lc
i,j≤
aibj
≤uci
,j..
把除轉換成減,就要用到對數:lg
l−lg
ci,j
≤lga
i−lg
bj≤l
gu−l
gci,
j ..
那麼運用這個公式進行差分約束就好了啊0.0..
題意:有乙個有向圖,每條邊有邊權,然後有這麼個操作ha
lum(
v,d)
,把連向
v 的所有邊減去
d,把從
v 連出去的邊加上
d,求從
1 到
n的最短的邊的最大值,如果不存在就輸出no solution,如果可以無窮大就輸出infinite
二分乙個可能的值mi
d ,對於一條從
u 到
v的邊,用su
mi表示點
i 的操作次數,就有:mi
d≤w(
u,v)
+sum
u−su
mv那麼就差分約束就行了啊..
題意:有n個在一條直線上的房子, 每個房子有著不同的高度, 乙個超人可以將這些房子左右移動但不能改變房子之間的相對位置.現在超人要從最矮的房子跳到剛好比他高的房子上面, 且每次跳的房子都要比當前房子要高.那麼最後超人肯定會跳到最高的房子上面, 現在給出超人能夠跳的最遠距離, 問: 如何擺放這些房子, 使得超人能夠經過所有的房子跳到最高的房子, 又要使最矮的房子和最高的房子之間的距離最遠??(摘自discuss..)
你肯定看不懂題意0.0..(逃) 設第
i 個房子的位置是po
si,第i
個的編號為x,第
i+1 個的編號為
y ,那麼就有:y−
x≤po
sy−p
osx≤
d 然後差分約束搞搞即可..
題意:有
n 頭牛排成一列,中間有距離,其中有
x個第一種條件,有
y 個第二種條件
第一種條件給出a,
b ,
c,表示di
sb−d
isa≤
c 第二種條件給出
a ,b,
c ,表示di
sb−d
isa≥
c 那麼不就是顯而易見的嗎0.0..
對於每乙個條件,就可以得到:ci
,j≤a
i−bj
≤ci,
j 直接套啊0.0..
詳見開坑了啦啦啦..
差分約束小結
感覺這玩意挺簡單的。出不了太難的題啊。這種奇怪的圖是可以跑最長路的,因為負環遲早要退出。一般來說要先判圖中是否存在正 負環,可以用spfa記錄每個點鬆弛次數判斷。每個點在一開始都扔進佇列,或者新建超源與點連邊均可。第二種更加有邏輯,且能處理點有初始值的情況,方式為將超源到點的邊權賦為點權,點到超源的...
差分約束系統小結
一 內容 有n個變數,m個約束條件組成的不等式組成的系統,稱為差分約束系統。差分約束系統就是將這些不等式的關係轉換為圖,用最短路的方法求解。二 常見問題即求解方法 1 求出這些不等式中的最小值 解法 將不等式轉化為a b c的形式,建立b a的邊,長度為c,然後求出最長路徑,最長路徑的解就是結果。2...
POJ3169差分約束 SPFA 差分約束
思路 假設i j 兩隻奶牛可以站在同乙個位置,但是必須公升序排列,所以有差分約束方程d i d i 1 0 對於兩隻有好感的奶牛有差分約束方程d j d i k 對於兩隻反感的奶牛有差分約束方程d i d j k 有了約束方程就可以spfa include include include inclu...