這道題吧題意大概就是給出三個數n,m,q,表示有兩個數列a和b,長度分別為n和m,有q次詢問,每次會說出i j <= c或者i j >=c表示ai+bj<=c或者ai+bj>=c.
現在給出每組資料,要求你回答是否存在悖論,或者說存在矛盾。
那麼我們這道題可以通過差分約束系統來求解。
1.什麼叫做差分約束系統?
通俗來說就是一組不等式,來約束變數,一般來說是做差。當然和可以轉化為做差,就得看你如何構造了,下面我們會詳細的來說這個問題。
2.什麼是最短路?
所謂最短路,就是通過dijkstra或者spfa等辦法來求解兩點之間的最短距離。
3.差分約束系統和我們的不等式是等價的嗎?
這個問題回答起來需要有圖論知識,差分約束系統都是轉化為最短路來求解的。但是為什麼我們的不等式有無解就可以轉化為最短路呢,我們可以把不等式這麼看:
比如說a-b<=c,那就等價於a<=b+c,到這裡我們容易看出如果我們在途中找兩點a和b,取a和b之間長度為c,那麼我們自然就有a<=b+c(如果這裡還不懂,那就真的得去看看圖論最短路了)。如果a-b>=c,那就等價於b-a<=-c,即為b4.為什麼要求最短路來判斷是否可解或者存在矛盾?
說為什麼要求最短路來判斷所有的邊都是可以存在的,即為原本不存在矛盾。那麼我們就得假設現在存在矛盾了,那麼我們圖中必然存在環,為什麼呢?因為存在矛盾就是說對於同乙個數,他的取值範圍的交集為空集,對於每個不等式我們都去縮小某個變數的範圍,直到空集(可以自行模擬,比如說a-b>=c,a-b<=c-1,這樣子來,當然也可以複雜點,這裡不做贅述),那現在圖中存在環,但是是不是只要存在環就是有矛盾呢?不是,比如說(a-b>=c,a-b<=c這樣並沒有矛盾),那環滿足什麼性質的時候就存在矛盾呢?存在負環,大家可以自行來算算,或者這麼想,如果存在負環,那麼我們每次經過環,距離就會減小,那麼我們就不存在最短距離,而有矛盾的時候就不存在最短距離,這樣剛好對應。或者也可以找環上兩個點,然後從環上直接找出兩個點的距離,正距離一定比負距離小,這表示(a-b>=c,a-b<=d,d5.如何求解?怎麼用更好的辦法來求解?
6什麼時候存在負環了呢?
sopa中入隊或者出隊次數超過節點數就會有負環,因為有負環時,她會一次次的進入負環把距離縮短,而正常每個節點的入度肯定是小於節點數的,所以只要判斷進入次數是不是大於他的最大可能入度即可。
好了,那麼這道題大概就說完了。
不對,彷彿沒說a+b<=c和a+b>=c怎麼轉化的問題,我們可以吧-b看成新的變數,轉化為a<=-b+c和-b<=a-c來構圖。
嗯,這樣子就沒問題了。
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;
struct node
edge[20005];
int cnt,pre[20005],sum[20005],dis[20005],e,v,n,m;
bool vis[20005],flag;
const int inf=0x3f3f3f3f3f;
void add_edge(int x,int y,int s)
void init()
void spfa()}}
}}
}int main()
{ //freopen("e://со·і//b_didponglie", "r", stdin);
//freopen("e://со·і//b_didponglie", "w", stdout);
int i,j,t;
char ch[15];
scanf("%d",&t);
while(t--&&scanf("%d%d%d",&n,&m,&v)!=eof)
{init();
for(i=0;i= 4
2 2 4
1 1 <= 3
2 1 <= 4
1 2 >= 5
2 2 >= 7
*/
差分約束系統
差分約束 若 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就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...