具體能解決的問題:
求最長路,最短路,或者判斷解是否存在。
在建邊的時候:
一般是給你區間減法的關係,或者是這個點到另乙個點的關係。如果給你的關係是除法的話,我們可以通過使用兩邊同時取log的方式,將除法變成兩個式子的減法,這樣就轉換成了減法的建邊。
判斷最優解的時候:
一般是判斷是否有負環或者正環,但是乙個spfa只能判斷一種,因為正環和負環的鬆弛條件是不同的,在判斷是正環還是負環的時候,一般是判斷某乙個點的入隊次數是不是大於總的點數,如果存在這種情況那肯定是存在正環或者負環的,如果是tle的話,可以考慮(僅供考慮)的一種優化的判斷,判斷某乙個點的入隊次數是不是大於sqrt(總的點數)。
對建邊的初步理解:
1,如果是求最長路或者最短路的話,我們可以將所有的不等式都化成如下的式子,posa-posb<=d。
然後對於求最長路,就是在spfa的基礎上改就可以了。將dis輸出初始化成-inf,然後判斷條件變成if(dis[ed]如果是求最短路的話,鬆弛條件改一下就可以了。
然後再就是建邊的時候,有兩種方法(超級源點的建立)。
第一種,如果是求字首的話,對於posa-posb<=d,我們可以addedge(a,b,d)。這樣話,就相當於從大的方向去鏈結小的方向,注意,如果只是按照題目條件去建邊的話,整個圖可能是不連通的,為了使圖聯通,我們可以建立乙個超級源點,如果是從大的方向向小的方向建邊的話,我們可以使超級源點是(總點數+1),然後這個超級源點再去連其他所有的點,邊權為0,這樣就不會影響到圖,並且能夠保證整個圖是聯通的。
第二種,如果是求字尾的話,我們就可以按照第一種的方法反著來就行了。
但是建邊的額時候還是盡量少建點邊,很可能會超時。
判斷可行解:
對於區間的可行解的話,我們可以直接從右邊界遍歷到右邊界,如果可以的話,判斷兩個相鄰的點的dis(一般間隔是1)是不是變了沒如果變了就說明當前這個點肯定有解。
差分約束系統
差分約束 若 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 沒有得到更新 的話是任意解 第三 一種建圖方法 設...
差分約束系統
差分約束系統 x1 x2 0 x1 x5 1 x2 x5 1 x3 x1 5 x4 x1 4 x4 x3 1 x5 x3 3 x5 x4 3 不等式組 1 全都是兩個未知數的差小於等於某個常數 大於等於也可以,因為左右乘以 1就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...