差分約束講解

2022-05-08 01:12:08 字數 1719 閱讀 3719

——by ysy

因為差分約束是基於\(spfa\)的一種解不等式,或等式組的技巧,所以差分約束的前置知識就是\(spfa\)和對不等式的簡單小變換。

​        因為差分約束只是乙個技巧,所以在這裡我先講解技巧,之後再講解例題。

建圖技巧

​        我們將不等式組分為兩種:\(a \le b+val\)以及\(a\ge b+val\)。

​        現在討論第一種\(a\le b+val\),我們在建圖時\(b \rightarrow a\)建邊,邊權為\(val\),所有的不等式都像這樣建邊的話,我們可以在建出的圖上跑最短路。

現在為第二種\(a\ge b+val\),我們在建圖時\(b \rightarrow a\)建邊,邊權為\(val\),所有的不等式都像這樣建邊的話,我們可以在建出的圖上跑最長路。

​        如果我所有的式子給出的時候不是都為第一種或者第二種呢?如果不將式子的形式統一的話,就沒法在建出來的圖上單純的跑最短路或者最長路。所以我們就需要將所有的式子的形式進行統一。

​        討論完不等式了,就剩下等式。\(a=b\)我們就以這個為例。等式可以化成不等式組\(a\le b\&\& a \ge b\)。我們將這個不等式組轉化成為圖就是$b \rightarrow a $,邊權為\(0\),同時加另一條邊\(a \rightarrow b\),邊權為\(0\)。這樣乙個等式就化為不等式的形式了。

我在上面寫的都是大於等於或者小於等於的情況,如果是大於或者小於的情況怎麼辦?我在這裡以大於為例:\(a\gt b \rightarrow a \ge b +1\)。我們只需要將式子化成為帶等於的形式就可以了。

1)題目鏈結

​        我們看這道題目,會發現題目之中有三個限制\(x_a \ge x_b+c\),\(x_a \le x_b+c\),\(x_a=x_b\)。我們們根據這三個性質能建出來乙個圖。第乙個條件就是$a \rightarrow b \(,邊權為\)-c\(。第二個條件就是\)b \rightarrow a\(,邊權為\)c\(。第三個條件就是\)a\rightarrow b \(和\)b\rightarrow a$邊權都為\(0\)。

​        因為我們要判斷能否成立,所以我們只需要在我們建出的圖上跑最短路,並且判斷是否有負環,如果有則輸出\(no\),否則輸出\(yes\)。因為要判斷負環,所以我們很容易想到\(spfa\)。

#include #include using namespace std;

#define n 10010

#define m 10010

#define inf1 1000000000

#define inf2 900000000

int n,m;

int head[n],nxt[m<<2],to[m<<2],val[m<<2];

int dis[n],idx;bool vis[n],is;

void add(int a,int b,int c)

void spfa(int p)

spfa(to[i]);

}vis[p]=false;

}int main()

for(int i=1;i<=n;i++) dis[i]=inf1;

for(int i=1;i<=n;i++) dis[i]=0,spfa(i);

if(is) printf("no\n");

else printf("yes");

}

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...

分糖果 差分約束

description 幼兒園裡有n 個小朋友,lxhgww 老師現在想要給這些小朋友們分配糖果,要求每個小朋友都要分到糖果。但是小朋友們也有嫉妒心,總是會提出一些要求,比如小明不希望小紅分到的糖果比他的多,於是在分配糖果的時候,lxhgww 需要滿足小朋友們的 k個要求。幼兒園的糖果總是有限的,l...

差分約束系統

差分約束 若 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 ...