怎麼搞?
1. 如果要求最大值
想辦法把每個不等式變為標準x-y<=k的形式,然後建立一條從y到x權值為k的邊,變得時候注意x-yx-y<=k-1
將這些約束條件轉化為差分約束,不妨設t[x] = s[1]+s[2]+....s[x],那麼上面式子就可以轉化為:
1. t[si+ni] - t[si-1] > ki 2. t[si+ni] - t[si-1] < ki
又差分約束系統的求解只能針對》=或<=,無法求解》的系統,還好ki是整數,可以很容易將《轉化為<=
1. t[si-1] - t[si+ni] <= -ki - 1 2. t[si+ni] - t[si-1] <= ki - 1
如果要求最小值
的話,變為x-y>=k的標準形式,然後建立一條從y到x的k邊,求出最長路徑即可,ralex;
2.如果權值為正,用dijk,spfa,bellman都可以,如果為負不能用dijk,並且需要判斷是否有負環,有的話就不存在
1.怎麼建圖;(為什麼這麼建圖)
2.為什麼求的是最長路,為什麼是最短路。
3.為什麼可以這麼做,別的方法還有的。
spfa去鬆弛的意思是什麼?
1.找最長或者最短,或者
判斷負環
2.也就是 例如:poj1364king題(判斷負環,表示滿足);
注:在spfa開始時將所有結點都放進佇列,這樣表示一開始和所有點都相連了,初始化dis陣列為全0,相當於超級源點的邊權值;
/*********------big problem*******-------//////-----
差分約束的dis[i]代表什麼;
距離;什麼距離.
所以說...
/*********------big problem*******-------//////-----
這裡有個技巧就是使用spfa不想新增附加的節點vs的話,可以在初始化把所有的節點都加到佇列中去,其實就相當於源點入隊,開始演算法後vs出隊
更新所得的佇列,因為沒有邊指向vs,所以後面的更新不會涉及到vs,即在後面的計算中都不會用到vs。
/*******--------建圖///初始化--------**************////////***---
【超級源點】
spfa的性質決定,因為智障的spfa會先從乙個點去引開它所連線的點。。。所以炒雞源點就是非常炒雞!!非常牛逼,連線了n個點
由於p a b x 指「確定a到b的距離(邊權)為x」
從p a b x得到的差分系統為
dist[a] - dist[b] >= x && dist[a] - dist[b] <= x
等價於dist[b] <= dist[a] - x && dist[a] <= dist[b] + x
則if(dist[b] > dist[a]-x) 鬆弛:dist[b] = dist[a]-x
由於 v a b指「只知道a到b的距離(邊權)至少為1」
從v a b得到的差分系統為
dist[a] >= dist[b] +1
等價於dist[b] <= dist[a] -1
則if(dist[b] > dist[a] -1) 鬆弛:dist[b] = dist[a] -1
小K的農場(差分約束,spfa)
小k在mc裡面建立很多很多的農場,總共n個,以至於他自己都忘記了每個農場中種植作物的具體數量了,他只記得一些含糊的資訊 共m個 以下列三種形式描述 但是,由於小k的記憶有些偏差,所以他想要知道存不存在一種情況,使得農場的種植作物數量與他記憶中的所有資訊吻合。輸入格式 第一行包括兩個整數 n 和 m,...
a b 在編譯基礎上的討論
關於討論 中的 c a b 這個表示式的面試題一直都在出現。從很直觀的角度上來說你可以理解成為以下的兩種形式 乙個是 c a b 另一種是c a b 其實做過編譯程式的人可以考慮以下過程,在詞法分析階段要進行的是將輸入的檔案切成token,並形成token序列,你可以知道 對 進行處理的時候將執行以...
BZOJ HNOI2005 狡猾的商人(差分約束)
time limit 10 sec memory limit 162 mb submit 4969 solved 2496 submit status discuss 刁奼接到乙個任務,為稅務部門調查一位商人的賬本,看看賬本是不是偽造的。賬本上記錄了n個月以來的收入情況,其中第i 個月的收入額為ai...