簡單來說,差分約束是用圖論中的最短路解決一些不等式(組)。
例如:xi表示序列第i個數,請求出一組滿足:x1-x5
<= 1, x1 - x3
<= 3, x2 - x4
<= -2的長度為5的序列
怎麼建圖?舉個栗子,x1-x5
<= 1, 就從結點5向結點1連一條權為1的邊。
x1-x5
<= 1 -> x1
<= x5 + 1
聯想到最短路的性質:dis(i) <= dis(j) + edge(j, i).(dis_i是源點到i距離)
兩個一一對應一下,把x1看成dis(1),x5看成dis(5),1就是這兩個結點連出的邊權,因此對於每一對xi - xj <= wk, 就從j到i連一條權是wk的邊即可。
為了圖的連通性(為了有個源點)最後再新建乙個結點0,連到每個結點,長度是0(即xi<=x0+0,因為x0不是題目中的結點,所以隨意約定它的值不會影響答案)
從結點0跑單源最短路,滿足這一系列不等式的的序列就是最後的dis(1) 到 dis(n)。
圖中有負環時無解。
剛剛講的是xi - xj <= wk的形式,直接j到i連一條權為wk,如果是 xi - xj >= wk 的話,兩邊乘以-1,轉換成xj - xi <= -wk,所以最後的方法是:i到j連一條權為-wk的邊。
如果是xi - xj = wk 呢?我們就建兩條邊,分別是xi - xj ≥ wk ,xi - xj ≤ wk。
;}這類題又有些微的不同,sum(n)是前n個單位種的樹的棵樹,好比字首和,所以sum(k+1)一定大於等於sum(k)
1.sum(k+1) ≤ sum(k)
2.sum(k+1) - sum(k) ≤ 1
於是我們這樣建邊:
for(int i=1;i<=n;i++) add(i-1,i,1),add(i,i-1,0);此時還能為了圖的連通將0與每個點相連嗎?
若建邊用add(0,i,0),則按照題意就是 sum(i) -sum(0) ≤ 0,這種建邊方式不適用於這種類似字首和的題。
於是我們只好選擇點 l+1以保持圖的連通。
for(int i=1;i<=n;i++) add(n+1,i,0);最後,我們要求的是種最少的棵數,然而我們求出的關係是相對的。
舉個栗子,3,4,5,9,2是一種方案,那麼1,2,3,7,0是同樣成立的。
於是我們最後要求的最少個數需要減去最小值
for(int i=0; i<=n; i++) minn =min(minn, dis[i]);某些粉絲之間互相喜歡,他們希望互相之間的距離至多為乙個定值。但某些粉絲乊間互相厭惡,他們希望互相之間的距離至少為乙個定值。現在給定k個互相喜愛的粉絲對以及他們乊間距離的最大值,l個互相厭惡的粉絲對以及他們之間距離的最小值。cout
<< dis[n] - minn << endl;
你的任務是計算在滿足以上條件的前提下,幫劣ysy計算出編號為1和編號為n的粉絲乊間距離的最大可能值。
【輸入】
輸入檔案為 layout.in。
第一行有 3 個整數,每兩個整數之間用乙個空格隔開,依次表示 n,k和l ;
此後k行,每行包含三個用空格分開的整數a, b和d,其中a,b滿足1<=a<=b<=n。表示編號為a和b的粉絲之間的距離至多為d。
此後l行,每行包含三個用空格分開的整數a,b和d,其中a,b滿足1<=a<=b<=n。表示編號為a和b的粉絲之間的距離至少為d。
【輸出】
輸出檔名為 layout.out。
輸出檔案僅包含乙個整數。如果丌存在任何吅法的排隊方式,就輸出-1。如果編號1和編號n的粉絲間距離可以任意,就輸出-2 。否則輸出他們之間的最大可能距離。
【輸入輸出樣例】
layout.in
4 2 1layout.out 【資料範圍】1 3 10
2 4 20
2 3 3
對於40%的資料,n<=100;
對於100%的資料,n<=1000;k, l<=10000;d<=1000000。
此題和上兩題又不一樣了,前兩題不需要連通,那麼我們新加乙個點,連線每乙個點以保證連通。
題意中「如果編號1和編號n的粉絲間距離可以任意,就輸出-2」,說明圖必須連通,所以我們只能選擇現有的點。
for(int i=1;i<=n;i++) add(i,i-1,0);//sum(i)>=sum(i-1)
if(!spfa(1)) printf("-1");else
if(vis[n] == 0)printf("-2"
);else printf("
%lld
",dis[n]);
差分約束系統
差分約束 若 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就可以化成小於等於 這樣的不等式組就稱作差分約束系統。這個不等式組要麼無解...