差分約束的簡單總結

差分約束  在數學上  更多被稱爲線性規劃

作爲線性規劃的一種特殊情況


“差分”即意味兩個變量作差

“約束”則意味這個差  滿足一些條件


比如  等於某個值   或   大於某個值   或   小於某個值

例 a - b >= x1

    b - c <= x2

    a - c == x3


而這類問題在計算機中  也一般只會要求你輸出  第i個變量與第j個變量       的差    最大是多少    最小是多少

—————————————分界線———————————————

對於   大於等於小於  三種情況    在競賽中不容易直接讓電腦理會並得出需要的結果


差分約束   則是通過  將(不)等式轉化爲圖論中的最短(長)路問題


類比    a - b >= x1       與          dis[a] - dis[b] >= x1            ==>        dis[a] >= dis[b] + x1

            b - c <= x2                   dis[b] - dis[c] <= x2            ==>        dis[c] >= dis[b] + (-x2)

            a - c == x3                   dis[a] - dis[c] <= x3                            dis[c] >= dis[a] + (-x3)

                                                 dis[a] - dis[c] >= x3                            dis[a] >= dis[c] + x3

                (1)                                         (2)                                                        (3)

——————————————分界線——————————————

如上  將(1)        最終轉化成了          (3)

而(3)   則可以通過指定一點的dis爲0   (例如  規定dis[a] = 0)

        然後從這個點開始求單源最長路 

        對於dis[c] >= dis[b] + (-x2)   則可以加一條邊  從b到c   邊權爲-x2

        因爲對於最長路   如果i能轉移到j      一定有dis[j] >= dis[i] + w[i][j]  

        所以這樣求出來的單源最長路一定是滿足所有式子


1                但是有可能最後求出來   目標點的dis沒有被賦值  

                    則說明從起點開始的約束    無法涉及到目標點

                  即目標點的值與起點的值   沒有任何關係  可以爲任意值

                

 2               也有可能有一個正環       導致死循環 

                    有正環則說明這一組式子不可滿足   例如(a > b + 1   b > a + 1)

                

____________________________分界線_________________________________________

對於1情況   最終只需要看看dis[final]是不是初始狀態就能判斷

對於2情況   則限制了求最短(長)路只能用spfa     (dij不能有負環)

                    對於一次spfa   若某個點被訪問了N次  則一定有環   (自證不難)便可由此判斷


ps :  將上文的(3)組式子也可以改寫成 a <= b + x的形式    那麼就需要求單源最短路 

                                 因爲最短路轉移維護了   dis[v] <= dis[u] + x




來幾道例題練練手吧

    poj3169        hdu3440        


再來一道不是那麼好建圖的。。          poj1275  

        (其實差分約束主要就難在建圖。。)

                                        

            

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章